回答
在 Redis 生产环境中我们是禁止使用 KEYS
命令的。
因为 KEYS
命令它会返回所有匹配的key,Redis 在执行该命令时会扫描整个键空间来匹配该模式下的所有 key,这个操作的时间复杂度为 O(N)
,N 表示 Redis 中 key 的总数,这意味如果在 Redis 中的 key 非常多的情况下,KEYS
命令的执行可能会非常慢。
同时,由于 Redis 是单线程的,当它在执行 KEYS
命令时,它会阻塞其他所有命令的执行,这会严重拖慢整个服务的吞吐量。
扩展
使用Scan代替 keys
SCAN
命令是 KEYS
命令的一个安全替代品。SCAN
命令不像 KEYS
一次性锁定 Redis 整个 key 空间,而是采用逐步迭代 Redis 中的 key,每次调用只返回一小部分 key,并可以在多次调用中使用游标来继续迭代。这种方式就大大减少了对 Redis 服务器的性能影响。
SCAN cursor [MATCH pattern] [COUNT count]
cursor
:迭代的游标MATCH
:用于指定模式COUNT
:每次返回的结果数量