1

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

我的钥匙是

"xyz" => {:status=> "已连接", :topic=> "ABC"}

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

现在我需要找到主题为“ABC”的所有键

4

2 回答 2

6

无论使用哪种编程语言,要有效地执行此操作,您都需要维护一个“索引”键,该键将某个值映射到键名。为此,您通常应该使用 Set 或 Sorted Set - 即向其中添加新键名并根据它们的值删除它们 - 并在您想要“搜索”时获取该键的内容。

有一些库(即 gems)可以提供这种随时可用的功能 - 看看你的案例中最优秀的Ohm

编辑

我的键是 xyz => {:status=> "connected", :topic=> "ABC"} PQR => {:status=> "connected", :topic=> "ABC"} 现在我需要找到所有主题为“ABC”的键

我会将 xyz 的值存储为字符串或哈希(取决于我是否需要更新/读取它的一部分)。然后我会SADD topic:ABC xyzSMEMBERS或做SSCAN它以获取该主题的所有键的名称。我也会尝试记住SREM主题中的相关成员:ABC 当我DEL的关键...

于 2015-08-21T10:21:49.340 回答
1

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

如果您正在运行 redis 2.8,您将能够使用扫描命令而不是键。

编辑: Redis 文档中最近添加的页面提供了有关使用 Redis 进行二级索引的更多信息,并在非范围索引部分下涵盖了这种情况。其中的其他主题包括:

于 2015-08-21T10:45:32.320 回答