【问题标题】:Insert data into REDIS (node.js + redis)将数据插入 REDIS (node.js + redis)
【发布时间】:2013-08-24 13:02:53
【问题描述】:

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

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

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

           }
});

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

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

【问题讨论】:

  • Isn't Unix time a timestamp?。如果您不介意增加的存储空间,您还有其他存储选项。您可以将时间存储为字符串,甚至可以将 date object 存储在 redis 中。虽然我没有亲自做过,但它应该工作得很好。我不知道哪个选项最适合您,但我个人会存储时间戳并在需要时转换为日期对象。

标签: node.js redis node-redis


【解决方案1】:

您正在寻找HMGETHMSET 的组合。根据the docs

HMGET 关键字段 [field ...]

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

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

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

将指定的字段设置为它们各自在哈希中的值 存储在密钥中。 此命令会覆盖 哈希。如果 key 不存在,则创建一个包含哈希的新 key。

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

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

HINCRBY 键域增量

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

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

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

{
    enabled : true,
    timestamp_g1 : 0,
    timestamp_g2 : 0
}

【讨论】:

  • 免责声明:我只涉足了一点Redis;在不久的将来,我会更多地参与其中。
  • 那我怎样才能使 timestamp_g1 变为 1377519643877_g1 或 g1_1377519643877 ?
  • 我想我不明白你的问题。该属性名为timestamp_g1,该属性的值是一个整数。为什么需要给时间戳加前缀或后缀?
  • 我重新思考,找到了另一个解决方案来满足我的需要:):room.g1.timestamp,count 和 room.g2.timestamp,count
  • 很高兴听到你想出了你的命名方案!如果我的回答与您的问题相关,请务必将其标记为已回答并对任何有用的 cmets 进行投票以奖励我的努力并让 stackoverflow 社区受益:)
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 2014-04-20
  • 1970-01-01
  • 2022-11-20
  • 2013-09-23
  • 2012-08-04
相关资源
最近更新 更多