首页/数据/数据库速查/KEYS 与 SCAN 的取舍(禁止线上 KEYS)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条
Redis 命令96 条
Redis 运维与场景124 条

KEYS 与 SCAN 的取舍(禁止线上 KEYS)

KEYS pattern 全量匹配会阻塞 Redis(O(N) 且单线程),生产禁用;SCAN 游标渐进遍历,虽有重复返回但安全。

数据库速查数据更新于 2026-10-12

安全遍历

安全遍历
SCAN 0 MATCH user:* COUNT 100
# 1) "512"  2) 1) user:1 2) user:9 ...
SCAN 512 MATCH user:* COUNT 100    # 用返回游标继续,直到 0
# COUNT 是提示量不是精确条数;MATCH 仍是全扫描后过滤
# 危险(仅限本地/离线小库):
KEYS user:*
KEYSO(N) 全量扫描,阻塞服务
SCAN游标式渐进遍历,可中断
替代非精确统计用 SCAN;精确前缀统计可维护计数器
线上执行 KEYS * 是大忌:几十万键即可造成秒级阻塞;需要按前缀找键就用 SCAN,或在写入时维护索引结构。

易错点

  • 运维排查随手 KEYS *:高峰期直接引发超时雪崩
  • 以为 SCAN 能保证不重复:缩容/扩容期间可能重复返回,业务要幂等

数据来源与参考

  • Redis 官方文档: SCAN
  • Redis 官方文档: KEYS

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌