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

时间:2017-07-14 14:05:36

标签: javascript node.js object redis node-redis

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

我的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中的确切绑定应该是什么。

1 个答案:

答案 0 :(得分:2)

这完全取决于您希望如何访问数据,但例如您可以尝试这样做:

要匹配您当前的结构,您可以使用以下内容:

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

采用更少的方法:

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格式出现时,您必须牢记这一点。可以任意嵌套。