2017-07-14 36 views
2

我正在使用node_redis客户端用于node.js.我有一个结构化的数据,目前我正试图用redis存储。每当我尝试将更多的键值添加到同一组时,它就会覆盖。我正在追逐它几天,我发现我必须添加独特的成员,然后我可以根据他们添加数据。我通过在用户级别定义唯一键来完成该部分,但我希望通过公司和用户名组合来创建哈希键,以便它在云中运行时始终是唯一的。在我jsonMessage在NodeJS中使用redis创建唯一的哈希键

{ 
    "Company": "ABC", 
    "Users": [ 
    { 
     "Username": "[email protected]", 
     "Authenticated": false 
    }, 
    { 
     "Username": "[email protected]", 
     "Authenticated": true 
    }, 
    { 
     "Username": "[email protected]", 
     "Authenticated": true 
    } 
    ] 
} 

数据我试了一下,到目前为止:

var message = JSON.parse(jsonMessage); 

message.Users.forEach(function(user,i){ 

    redisClient.sadd("users", "user:" + i); 

    redisClient.hmset("user:" + i, "Username", user.Username, "Authenticated", user.Authenticated); 

}); 

我怎么把我的数据,根据该公司。在哪里我应该把我的公司,然后分别添加其用户,因为我有由多家公司组成的数据。

什么应该是公司与其用户在redis中的确切绑定。

回答

2

这一切都取决于你想如何访问数据,但例如,你可以尝试做这样的:

为了配合当前的结构,你可以使用这样的事情:

set "company:ABC:users:0:username" "[email protected]" 
set "company:ABC:users:0:authenticated" 0 
set "company:ABC:users:1:username" "[email protected]" 
set "company:ABC:users:1:authenticated" 1 

随着越来越多的最小的方法:

set "ABC:[email protected]" 0 
set "ABC:[email protected]" 1 

随着潜在更多的数据存储以后:

hset "ABC:[email protected]" "authenticated" 0 
hset "ABC:[email protected]" "authenticated" 1 

所有这些方法都意味着有不同的访问数据的方式,当然这表明您可以通过多种方式来构建数据。进入这个网站,你可以在网上尝试所有这些命令:

你要记住什么是你不能有深嵌套结构Redis的。你可以有散列,但它们是单层的,嵌套的多层通常使用复杂的键,如“a:b:c”或“abc”来模拟 - 当你的原始数据是JSON时,你必须牢记这一点可以任意嵌套自然。