可用版本:1.0.0

时间复杂度O(N),其中 N 是数据库中的键数量,假设数据库中的键名和给定模式的长度有限。

ACL 类别:@keyspace, @read, @slow, @dangerous

功能:返回所有匹配模式的键。

尽管该操作的时间复杂度为 O(N),但常数时间相对较低。例如,运行在入门级笔记本上的 Redis 可以在 40 毫秒内扫描包含 100 万个键的数据库。

警告

应仅在生产环境中极其谨慎地使用 KEYS 命令。当它在大型数据库上执行时,可能会破坏性能。此命令主要用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用 KEYS。如果你需要在键空间的子集中查找键,建议使用 SCANsets

支持的通配符模式

  • h?llo 匹配 hello, hallohxllo
  • h*llo 匹配 hlloheeeello
  • h[ae]llo 匹配 hellohallo,但不匹配 hillo
  • h[^e]llo 匹配 hallo, hbllo,但不匹配 hello
  • h[a-b]llo 匹配 hallohbllo

如果要逐字匹配特殊字符,可以使用 \ 进行转义。

在使用 Redis 集群时

对于映射到单个槽位的模式,搜索进行了优化。如果模式只能匹配一个槽位的键,Redis 在搜索匹配该模式的键时,只会遍历该槽位中的键,而不会遍历整个数据库。例如,使用模式 {a}h*llo 时,Redis 会尝试仅在槽位 15495 中匹配该模式,该槽位由哈希标签 {a} 映射。

在集群中单个节点中调用 KEYS 命令时,并不能到所有主节点上的主节点槽位上的所有匹配键,示例如下,集群所有的字符串键值对如下,在某一个节点上使用 KEYS 命令获取到部分键值。

1
2
$ keys *
1) "stringKey5"

相关链接

Redis Commands | redis.io

KEYS | redis.io

OB tags

#Redis