如何在 Ruby 中搜索具有值的键?例如,获取值为“somevalue”的所有 KEYS。
我的钥匙是
"xyz" => {:status=> "已连接", :topic=> "ABC"}
"PQR" => {:status=> "已连接", :topic=> "ABC"}
现在我需要找到主题为“ABC”的所有键
如何在 Ruby 中搜索具有值的键?例如,获取值为“somevalue”的所有 KEYS。
我的钥匙是
"xyz" => {:status=> "已连接", :topic=> "ABC"}
"PQR" => {:status=> "已连接", :topic=> "ABC"}
现在我需要找到主题为“ABC”的所有键
无论使用哪种编程语言,要有效地执行此操作,您都需要维护一个“索引”键,该键将某个值映射到键名。为此,您通常应该使用 Set 或 Sorted Set - 即向其中添加新键名并根据它们的值删除它们 - 并在您想要“搜索”时获取该键的内容。
有一些库(即 gems)可以提供这种随时可用的功能 - 看看你的案例中最优秀的Ohm。
编辑
我的键是 xyz => {:status=> "connected", :topic=> "ABC"} PQR => {:status=> "connected", :topic=> "ABC"} 现在我需要找到所有主题为“ABC”的键
我会将 xyz 的值存储为字符串或哈希(取决于我是否需要更新/读取它的一部分)。然后我会SADD topic:ABC xyz
做SMEMBERS
或做SSCAN
它以获取该主题的所有键的名称。我也会尝试记住SREM
主题中的相关成员:ABC 当我DEL
的关键...
取决于您可以在 redis >= 2.8.13 上使用 getkeys 的 redis 版本,或者您可以使用keys命令来处理一些性能问题(如果您的键很少应该不是问题,但如果您有大量的键请注意这样,因为 keys 命令会阻止 redis 片刻以获取所有密钥)
如果您正在运行 redis 2.8,您将能够使用扫描命令而不是键。
编辑: Redis 文档中最近添加的页面提供了有关使用 Redis 进行二级索引的更多信息,并在非范围索引部分下涵盖了这种情况。其中的其他主题包括: