KEYS:获取所有与给定匹配符相匹配的键

KEYS 命令接受一个全局匹配符作为参数,然后返回数据库里面所有与这个匹配符相匹配的键作为结果:

  1. KEYS pattern

举个例子,如果我们想要获取数据库包含的所有键,那么可以执行以下命令:

  1. redis> KEYS *
  2. 1) "fruits"
  3. 2) "user::12312::profile"
  4. 3) "user::ip"
  5. 4) "user::id"
  6. 5) "cache::/user/peter"
  7. 6) "todo-list"

又或者说,如果我们想要获取所有以 user:: 为前缀的键,那么可以执行以下命令:

  1. redis> KEYS user::*
  2. 1) "user::12312::profile"
  3. 2) "user::ip"
  4. 3) "user::id"

最后,如果数据库里面没有任何键与给定的匹配符相匹配,那么 KEYS 命令将返回一个空值:

  1. redis> KEYS article::*
  2. (empty list or set) -- 数据库里面没有任何以 article:: 为前缀的键

全局匹配符

KEYS 命令允许使用多种不同的全局匹配符作为 pattern 参数的值,表 11-1 展示了一些常见的全局匹配符,并举例说明了这些匹配符的作用。


表 11-1 Glob 匹配符的作用及其示例

匹配符作用例子
匹配零个或任意多个任意字符user:: 可以匹配任何以 user:: 为前缀的字符串,比如 user::ipuser::12312::profile 等等,以及 user:: 本身;z 可以匹配任何以字母 z 结尾的字符串,比如 antirezmatzhuangz ,以及字母 z 本身;::* 可以匹配任何使用了 :: 作为间隔符的字符串,比如 user::ipcache::/user/peter ,但不能匹配 todo-list
?匹配任意的单个字符user::i? 可以匹配任何以 user::i 为前缀,后跟单个字符的字符串,比如 user::ipuser::id 等,但不能匹配 user::ime
[]匹配给定字符串中的单个字符user::i[abc] 可以匹配 user::iauser::ibuser::ic ,但不能匹配 user::id 或者 user::ime ,诸如此类。
[?-?]匹配给定范围中的单个字符user::i[a-d] 可以匹配 user::iauser::ibuser::icuser::id ,但不能匹配除此以外的其他字符串,比如 user::ip 或者 user::ime

关于全局匹配符的更多信息可以参考维基百科https://en.wikipedia.org/wiki/Glob_(programming))或者 glob 程序的手册页面:http://man7.org/linux/man-pages/man7/glob.7.html

其他信息

属性
复杂度O(N) ,其中 N 为数据库包含的键数量。
版本要求KEYS 命令从 Redis 1.0.0 版本开始可用。