Redis:查找与模式匹配的键

Hoa*_*uan 18 pattern-matching redis

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

例如:

我有一些钥匙:

abc:parent1

abc:parent2

abc:parent1:child1

abc:parent2:child2

我怎么才能找到

abc:parent1

abc:parent2

The*_*ill 31

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

Set abc:parent1:child1 breakfast
Sadd abc:parent1:index abc:parent1
Run Code Online (Sandbox Code Playgroud)

然后当你需要清单时:

Smembers abc:parent1:index
Run Code Online (Sandbox Code Playgroud)

将给你列表,没有与使用"邪恶"键命令相关的惩罚和问题.此外,您将删除具有sremove键删除的条目.您还可以通过一次调用了解索引中有多少键的功能.

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


Biv*_*cob 12

命令KEYS模式 将帮助您同样.

例如:

redis> MSET one 1 two 2 three 3 four 4
OK
redis> KEYS *o*
1) "two"
2) "one"
3) "four"
Run Code Online (Sandbox Code Playgroud)

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

redis 127.0.0.1:6379> keys *parent[0-9]
1) "abc:parent2"
2) "abc:parent1"
Run Code Online (Sandbox Code Playgroud)

这是命令的详细说明.

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

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

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

  • @ItamarHaber`KEYS`不是*邪恶.在生产代码中使用它是.作为一种开发工具,它非常宝贵. (2认同)