在NodeJS中使用redis创build唯一的哈希键

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

数据在我的jsonMessage

{ "Company": "ABC", "Users": [ { "Username": "john@gmail.com", "Authenticated": false }, { "Username": "chris@gmail.com", "Authenticated": true }, { "Username": "shaun@hotmail.com", "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中,公司和用户的确切关系应该是什么?

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

要匹配你当前的结构,你可以使用这样的东西:

 set "company:ABC:users:0:username" "john@gmail.com" set "company:ABC:users:0:authenticated" 0 set "company:ABC:users:1:username" "chris@gmail.com" set "company:ABC:users:1:authenticated" 1 

用更less的方法:

 set "ABC:john@gmail.com" 0 set "ABC:chris@gmail.com" 1 

随着更多的数据以后可能存储:

 hset "ABC:john@gmail.com" "authenticated" 0 hset "ABC:chris@gmail.com" "authenticated" 1 

所有这些方法意味着有不同的方法来访问数据当然,这表明你可以用很多方式来构造你的数据。 转到这个网站,您可以在线尝试所有这些命令:

你必须牢记的是,你不能在Redis中拥有深度嵌套的结构。 你可以有散列,但它们是单层的,嵌套的多层次通常是用复杂的键(比如“a:b:c”或“abc”)来模拟的 – 当你的原始数据是JSON的时候,你必须牢记这一点可以任意嵌套自然。