Redis:查找与模式匹配的键

时间:2015-09-09 08:33:38

标签: redis pattern-matching

我如何找到匹配这样的模式的键:

例如:

我有一些钥匙:

abc:parent1

abc:parent2

abc:parent1:child1

abc:parent2:child2

我怎样才能找到

abc:parent1

abc:parent2

2 个答案:

答案 0 :(得分:29)

Keys特别注明为由于其工作方式而无法在生产中运行的命令。你需要的是创建一个键的索引。使用set存储所需模式的键名。添加新密钥时,请将其名称添加到集合中。例如:

Set abc:parent1:child1 breakfast
Sadd abc:parent1:index abc:parent1

然后当你需要清单时:

Smembers abc:parent1:index

会给你列表,没有与使用“evil”键命令相关的惩罚和问题。此外,您将删除密钥删除时sremove的条目。您还可以通过一次调用了解索引中有多少键。

如果你绝对肯定,必须避免使用索引SCAN而不是键。你应该考虑密钥的唯一时间是你运行一个调试从站,其中唯一使用它的进程是你的调试过程。

答案 1 :(得分:8)

命令 KEYS模式 会帮助你。

例如:

redis> MSET one 1 two 2 three 3 four 4
OK
redis> KEYS *o*
1) "two"
2) "one"
3) "four"

对于您的具体示例,以下命令将起作用:

redis 127.0.0.1:6379> keys *parent[0-9]
1) "abc:parent2"
2) "abc:parent1"

此处the detailed description of the command

更新:虽然上面的建议可以帮助您获得所需的输出,但redis KEYS 命令却像其他人提到的那样是邪恶的。 KEYS 正在阻塞,并且在准备响应时会消耗大量RAM。

  

不要在常规应用程序代码中使用KEYS。如果您正在寻找在密钥空间子集中查找密钥的方法,请考虑使用SCAN或集合。

感谢Real Bill和Itamar,我得到了更好的理解。