0

如何,我可以插入(存储)这样的数据(node.js + redis):

var timestamp = new Date().getTime();

client.hmset('room:'+room, {
          'enabled' : true,
           timestamp : {
              'g1' : 0,
              'g2' : 0

           }
});

以及我可以为 g1 或 g2 增加多少?

PS 以这种方式插入时间戳时,redis-cli 显示时间戳而不是 UNIX 时间

4

1 回答 1

2

您正在寻找HMGETHMSET的组合。根据文档

HMGET 关键字段 [字段 ...]

返回与存储在 key 的哈希中的指定字段关联的值。

对于散列中不存在的每个字段,返回一个 nil 值。因为不存在的键被视为空哈希,所以对不存在的键运行 HMGET 将返回一个 nil 值列表。

HMSET 键字段值 [字段值 ...]

将指定字段设置为存储在 key 的哈希中的各自值。此命令会覆盖散列中的任何现有字段。如果 key 不存在,则创建一个包含哈希的新 key。

然后,您想要做的是从 has 中检索您的值,对其执行任何看起来合适的操作,并保存以前的值。

另一个可能更好的解决方案是使用HINCRBY。如果您坚持使用时间戳,您可以在不执行 get 操作的情况下增加字段:

HINCRBY 键域增量

以增量方式递增存储在 key 的哈希中存储在字段中的数字。如果 key 不存在,则创建一个包含哈希的新 key。如果字段不存在,则在执行操作之前将值设置为 0。

HINCRBY 支持的值范围限于 64 位有符号整数。

不过,您可能需要重新构建哈希才能使其正常工作,除非有办法深入了解您的 g1/g2 字段(stackoverflow 社区,如果您知道方法,请随时编辑此答案或评论它)。这样的结构应该可以工作:

{
    enabled : true,
    timestamp_g1 : 0,
    timestamp_g2 : 0
}
于 2013-08-24T04:36:59.133 回答