如何,我可以插入(存储)这样的数据(node.js + redis):
var timestamp = new Date().getTime();
client.hmset('room:'+room, {
'enabled' : true,
timestamp : {
'g1' : 0,
'g2' : 0
}
});
如果我能为g1或g2做增量是多么痛苦?
P.S。当以这种方式插入时间戳时,redis-cli显示时间戳而不是UNIX时间
答案 0 :(得分:1)
您正在寻找HMGET和HMSET的组合。根据{{3}}:
HMGET关键字段[字段...]
返回与散列中指定字段关联的值 存储在密钥中。
对于散列中不存在的每个字段,nil值为 回。因为不存在的键被视为空哈希, 针对不存在的密钥运行HMGET将返回nil列表 值。
HMSET关键字段值[字段值...]
将指定的字段设置为散列中各自的值 存储在密钥中。 此命令将覆盖中的任何现有字段 散列。如果key不存在,则会创建一个包含哈希的新密钥。
然后,您要执行的操作是从has中检索您的值,对其执行任何看似合适的操作,并保存以前的值。
另一种可能更好的解决方案是使用the docs。如果您坚持使用时间戳,则可以在不执行get操作的情况下递增字段:
HINCRBY键字段增量
增加存储在key的哈希值中的字段数 增量。如果key不存在,则创建一个包含哈希的新密钥。 如果字段不存在,则在操作之前将值设置为0 进行。
HINCRBY支持的值范围限制为64位有符号 整数。
你可能需要重构你的哈希才能使用它,除非有办法深入到你的g1 / g2字段(stackoverflow社区,如果你知道一种方法,可以随意编辑这个答案或评论它) 。像这样的结构应该有效:
{
enabled : true,
timestamp_g1 : 0,
timestamp_g2 : 0
}