Redis 通过 client 命令如何查看返回所有可能的 key 命令有两种方式,一个是 keys 命令,在 2.8 版本及之后,可以用够高级的 scan 命令。
方式一:keys
KEYS pattern
Redis KEYS 命令查找并所有符合指定模式 pattern 的 key,如果要返回所有的 key,pattern 用通配符 * 替代即可。
KEYS *
该命令时间复杂度为 O(N),当数据库键非常多时,该命令应谨慎使用,线上环境慎用。
方式二:scan
Redis 在 2.8 版本及以后,可以选择更高级的 SCAN 命令代替 KEYS 命令。
SCAN cursor [MATCH pattern] [COUNT count]
Redis SCAN 命令查找给定数量内个数的符合给定模式 pattern 的 key。
KEYS 和 SCAN 的区别
keys 命令特点:
- 该指令一次性返回所有匹配的 key;
- key的数量过大时,会影响 redis 的性能,会导致服务卡顿。
scan 命令特点:
- 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程;
- 增量式迭代命令并不保证每次执行都返回某个给定数量的元素,只能是大概率符合 COUNT 参数;
- 返回的游标不一定是递增的,可能会获取到重复key,需要在外部程序去重。
综上所述,数据量小时使用 KEYS,反之使用 SCAN。