【问题标题】:Redis hash or key replaceRedis 哈希或密钥替换
【发布时间】:2017-06-01 21:02:07
【问题描述】:

如果我在 redis 中存储了一个对象哈希,请说这个哈希:

 { a: 1, b: 2, c: 3, d: 4, e: 5 }

如果我知道我的哈希值 d 已更改为 10,我是否可以只更新该 redis 哈希键值,而不是获取哈希,修改它并将其写回 redis?

我在redis中缓存了一个对象状态,基本上一旦状态发生变化,我正在寻找刷新缓存的有效方法。

有没有更好的方法来做到这一点?

你好,我试过了

a = { a: 1, b: 2, c: 3, d: 4, e: 5 }
REDIS.mapped_hmset('key', a)

所以这行得通:

b = REDIS.hgetall('key')
b['d'] = 10
REDIS.mapped_hmset('key', b)

但如果可能的话,我正在寻找一些东西来修改 redis 中的密钥或替代方法。

【问题讨论】:

  • 欢迎来到 Stack Overflow。重要的是要展示您尝试过的方法,并解释为什么它不起作用。
  • @theTinMan 谢谢,我确实添加了我尝试过的内容。

标签: ruby ruby-on-rails-4 hash redis


【解决方案1】:

如果您希望更改(或添加)哈希中的单个值,您可以使用HSET 命令。这不会从 redis 中“获取”哈希(将其返回给您),它只会修改它。

在你的情况下,命令是HSET YourHashName d 10

HSET Documentation on redis.io

如果您发现要同时更改多个值,请使用HMSET。这个命令比多次调用HSET 来做同样的事情更有效,因为它在网络上不那么闲聊。

HMSET Documentation on redis.io

请记住,在散列中添加或更改数据时,您无需先读取/获取散列(或任何单个散列键值)。另外,如果设置数据时哈希值不存在,则会创建哈希值而不是返回错误。

【讨论】:

  • @Remember_me 在看到您的编辑后,我在答案中添加了更多信息,因为我知道您的代码是如何运行的。
猜你喜欢
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
相关资源
最近更新 更多