将数据插入REDIS(node.js + redis)

时间:2013-08-23 23:16:25

标签: node.js redis node-redis

如何,我可以插入(存储)这样的数据(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时间

1 个答案:

答案 0 :(得分:1)

您正在寻找HMGETHMSET的组合。根据{{​​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
}