在 Node.js Redis 客户端中管理唯一哈希键
Manage unique hash keys in Node.js Redis client
我正在使用 node_redis NodeJS 客户端。我有目前正在尝试存储在 Redis 中的结构化数据。每当我尝试向同一组添加更多键值时,它都会被覆盖。我追了好几天,我发现我必须添加唯一成员,然后我才能根据他们添加数据。我通过在用户级别定义唯一键来完成该部分,但我想创建具有公司和用户名组合的哈希键。这样,当它上线时;它总是为每个用户生成一个唯一的哈希值。
JSON:
{
"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
使用更简单的方法:
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" 或 "a.b.c" 等复杂键来模拟多层嵌套 - 当您的原始数据以 [= 形式出现时,您必须记住这一点32=]自然可以任意嵌套。
我正在使用 node_redis NodeJS 客户端。我有目前正在尝试存储在 Redis 中的结构化数据。每当我尝试向同一组添加更多键值时,它都会被覆盖。我追了好几天,我发现我必须添加唯一成员,然后我才能根据他们添加数据。我通过在用户级别定义唯一键来完成该部分,但我想创建具有公司和用户名组合的哈希键。这样,当它上线时;它总是为每个用户生成一个唯一的哈希值。
JSON:
{
"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
使用更简单的方法:
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" 或 "a.b.c" 等复杂键来模拟多层嵌套 - 当您的原始数据以 [= 形式出现时,您必须记住这一点32=]自然可以任意嵌套。