通过node.js应用程序在redis中保存嵌套哈希

Luc*_*Luc 26 redis node.js

我正在使用node_redis,我想保存一个结构,如:

{
users : 
    "alex" : { "email" : "alex@gmail.com",
           "password" : "alex123"},
    "sandra" : { "email" : "sandra@gmail.com",
           "password" : "sandra123"},
    ...
}
Run Code Online (Sandbox Code Playgroud)

目前,我为每个用户创建了一个JSON对象:

jsonObj = { "email" : "alex@gmail.com",
            "password" : "alex123"}
Run Code Online (Sandbox Code Playgroud)

做一个

db.hmset("alex", JSON.stringify(jsonObj))
Run Code Online (Sandbox Code Playgroud)

是否有可能将此结构嵌入另一个结构(用户一个?)如何设置用户["alex"]具有此结构?

yoj*_*o87 23

据我所知,Redis中没有对嵌套结构的本机支持,但可以使用set + hash(类似于分层树)对它们进行建模.哈希可能最适合存储单个JSON对象的字段和值.我要做的是为每个用户存储一个前缀(这是一个Redis 约定),例如:

db.hmset("user:alex", JSON.stringify(jsonObj));
Run Code Online (Sandbox Code Playgroud)

然后使用集合将用户分组到一个名为密钥的集合中users.然后,我可以通过smembers命令获取所有用户密钥,并使用hgetall单独访问每个用户密钥.

  • 我不确定我完全理解这个答案.你说哈希可能最适合存储单个JSON对象的字段和值.为什么这比使用SET将JSON编码的值存储到字符串更好?你在比较`HSET用户:{id}名称Fred`与`SET user:{id}'{"name":"Fred"}'`?如果是这样,如果您经常访问Object的所有字段,我认为SET(以及后续的JSON解析)通常比HSET更快.思考? (4认同)

Llo*_*ore 16

您可以将子结构存储为对象,并将其id存储在主结构中,而非像指针一样.所以,举个例子,我会做以下几点

{
users : 
    "alex" : { "email" : "alex@gmail.com",
           "password" : "alex123"},
    "sandra" : { "email" : "sandra@gmail.com",
           "password" : "sandra123"},
    ...
}
$x = incr idx:user
hmset user:$x email alex@gmail.com password alex123
sadd list:user $x

$x = incr idx:user
hmset user:$x email sandra@gmail.com password sandra123
sadd list:user $x
Run Code Online (Sandbox Code Playgroud)

希望这个可能的解决方