我该如何找到与此类似的键:
例如:
我有一些键:
abc:parent1
abc:parent2
abc:parent1:child1
abc:parent2:child2
如何只查找以下键:
abc:parent1
abc:parent2
我该如何找到与此类似的键:
例如:
我有一些键:
abc:parent1
abc:parent2
abc:parent1:child1
abc:parent2:child2
如何只查找以下键:
abc:parent1
abc:parent2
由于它的工作方式,"Keys"命令被特别指出不应在生产环境中运行。你需要在这里创建一个键的索引。使用set
来存储你想要的模式的键名称。当你添加一个新的键时,将其名称添加到集合中。例如:
Set abc:parent1:child1 breakfast
Sadd abc:parent1:index abc:parent1
当您需要该列表时:
Smembers abc:parent1:index
提供列表,无需使用“邪恶”的keys命令所带来的罚款和问题。此外,在删除键时使用可以删除一个条目。您还可以通过一次调用获得索引中有多少个键的好处。
如果您绝对、坚决地必须避免使用索引,请使用SCAN
而不是keys。唯一应该考虑使用keys的时间是,如果您正在运行一个调试从服务器,唯一使用它的进程是您的调试进程。
如果不是在生产环境下,KEYS pattern 命令可以帮助您实现相同的功能。(永远不要在生产环境中使用 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"
这里是该命令的详细描述.
更新: 尽管上述建议可以帮助您获得所需的输出,但Redis KEYS 命令与其他人提到的一样邪恶。 KEYS 是阻塞的,而且在准备响应时可能会消耗大量RAM。
在常规应用程序代码中不要使用KEYS。如果您想要在键空间的子集中查找键的方法,请考虑使用SCAN或sets。
感谢 The Real Bill 和 Itamar,我有了更好的理解。
permission:/url1/id/sub:write
和 permission:/url1/id:write
以仅匹配 permission:/url1/[^/]+
? - Natim
set abc:parent1:child1 breakfast
然后sadd abc:parent1 child1
? - Automatico