web-dev-qa-db-ja.com

node.jsアプリを介してネストされたハッシュをredisに保存します

Node_redisを使用していて、次のような構造を保存したいと思います。

{
users : 
    "alex" : { "email" : "[email protected]",
           "password" : "alex123"},
    "sandra" : { "email" : "[email protected]",
           "password" : "sandra123"},
    ...
}

現在、ユーザーごとにJSONオブジェクトを作成しています。

jsonObj = { "email" : "[email protected]",
            "password" : "alex123"}

そして、

db.hmset("alex", JSON.stringify(jsonObj))

この構造を別の構造(ユーザーの構造)に埋め込むことは可能ですか?この構造でusers ["alex"]を設定するにはどうすればよいですか?

27
Luc

私の知る限り、Redisにはネストされた構造のネイティブサポートはありませんが、たとえばset + hashを使用してモデル化できます( 階層ツリー と同様)。 ハッシュ は、単一のJSONオブジェクトのフィールドと値を格納するのにおそらく最適です。私がすることは、各ユーザーにプレフィックス(Redis convention )を付けて保存することです。例:

db.hmset("user:alex", JSON.stringify(jsonObj));

次に、 sets を使用して、ユーザーをusersという名前のキーを持つ1つのセットにグループ化します。次に、 smembers コマンドですべてのユーザーキーを取得し、 hgetall で各ユーザーキーに個別にアクセスできます。

23
yojimbo87

サブ構造をオブジェクトとして保存し、そのIDをポインターのようにメイン構造内に保存することができます。だから、あなたの例を考えると、私は次のことをします

{
users : 
    "alex" : { "email" : "[email protected]",
           "password" : "alex123"},
    "sandra" : { "email" : "[email protected]",
           "password" : "sandra123"},
    ...
}
$x = incr idx:user
hmset user:$x email [email protected] password alex123
sadd list:user $x

$x = incr idx:user
hmset user:$x email [email protected] password sandra123
sadd list:user $x

この可能な解決策が役立つことを願っています

16
Lloyd Moore