如何在Ruby中搜索具有值的键?例如,获取值为" somevalue"。
的所有KEYS我的钥匙是
" XYZ" => {:状态=> "已连接",:topic => " ABC"}
" PQR" => {:状态=> "已连接",:topic => " ABC"}
现在我需要找到主题为" ABC"
的所有KEYS答案 0 :(得分:6)
无论使用哪种编程语言,要有效地执行此操作,您都需要维护一个"索引"将somevalue映射到键名的键。使用Set或Sorted Set就是你应该做的事情 - 即为它添加新的键名并根据它们的值删除它们 - 并在你想要"搜索&#时获取该键的内容34。
有些库(即宝石)可以提供这种功能,可以使用 - 在您的案例中查看最优秀的Ohm。
修改强>
我的密钥是xyz => {:状态=> "已连接",:topic => " ABC"} PQR => {:状态=> "已连接",:topic => " ABC"}现在我需要找到主题为" ABC"
的所有KEYS
我会将xyz的值存储为String或Hash(取决于我是否需要更新/只读取部分内容)。然后我会SADD topic:ABC xyz
并在其上SMEMBERS
或SSCAN
获取该主题的所有键的名称。我还会尝试记住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部分介绍了此案例。其他主题包括: