2024-05-02  阅读(67)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1232635592

回答

在 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 :每次返回的结果数量