Redis搜索具有值的键

时间:2015-08-21 10:16:33

标签: ruby redis redis-rails

如何在Ruby中搜索具有值的键?例如,获取值为" somevalue"。

的所有KEYS

我的钥匙是

" XYZ" => {:状态=> "已连接",:topic => " ABC"}

" PQR" => {:状态=> "已连接",:topic => " ABC"}

现在我需要找到主题为" ABC"

的所有KEYS

2 个答案:

答案 0 :(得分:6)

无论使用哪种编程语言,要有效地执行此操作,您都需要维护一个"索引"将somevalue映射到键名的键。使用Set或Sorted Set就是你应该做的事情 - 即为它添加新的键名并根据它们的值删除它们 - 并在你想要"搜索&#时获取该键的内容34。

有些库(即宝石)可以提供这种功能,可以使用 - 在您的案例中查看最优秀的Ohm

修改

  

我的密钥是xyz => {:状态=> "已连接",:topic => " ABC"} PQR => {:状态=> "已连接",:topic => " ABC"}现在我需要找到主题为" ABC"

的所有KEYS

我会将xyz的值存储为String或Hash(取决于我是否需要更新/只读取部分内容)。然后我会SADD topic:ABC xyz并在其上SMEMBERSSSCAN获取该主题的所有键的名称。我还会尝试记住SREM来自主题的相关成员:当我DEL其关键字时ABC ...

答案 1 :(得分:1)

取决于您可以在redis> = 2.8.13上使用哪个版本的redis getkeys,或者您可以使用keys命令注意一些性能问题(如果您的密钥很少,则不应该是问题,但如果你有大量的密钥注意这一点,因为键命令将阻止redis片刻以获得所有键)

如果您运行的是redis 2.8,则可以使用scan命令代替键。

编辑:Redis文档中最近添加的页面提供了有关Secondary indexing with Redis的更多信息,并在Non range indexes部分介绍了此案例。其他主题包括: