Save nested hash in redis via a node.js app

2019-01-21 11:15发布

I'm using node_redis and I'd like to save a structure like:

{
users : 
    "alex" : { "email" : "alex@gmail.com",
           "password" : "alex123"},
    "sandra" : { "email" : "sandra@gmail.com",
           "password" : "sandra123"},
    ...
}

Currently, for each user I create a JSON object:

jsonObj = { "email" : "alex@gmail.com",
            "password" : "alex123"}

and do a

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

Is it possible to embedded this strucute in another structure (the users one ?) How could I set users["alex"] with this structure ?

标签: node.js redis
2条回答
混吃等死
2楼-- · 2019-01-21 11:34

You could store the sub structure as an object and store it's id within the main structure, rather like a pointer. So, given your example, I would do the following

{
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

Hope this possible solution helps

查看更多
Ridiculous、
3楼-- · 2019-01-21 11:45

As far as I know there isn't native support for nested structures in Redis, but they can be modeled for example with set+hash (similar to hierarchical trees). Hashes are probably best suited for storing fields and values of single JSON object. What I would do is to store each user with a prefix (which is a Redis convention), for example:

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

and then use sets to group users into one set with a key named users. I can then get all of the users keys by smembers command and access each of them individually with hgetall.

查看更多
登录 后发表回答