首页/数据/数据库速查/大 key 排查(--bigkeys / --memkeys)
Redis 运维与场景124 条

大 key 排查(--bigkeys / --memkeys)

redis-cli --bigkeys 抽样扫描给出每类型最大键;--memkeys 按内存排序;生产扫描要限速,避免拖慢实例。

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

大 key 是什么

大 key 指单个键的数据量或元素数量远超合理范围,例如几十万元素的 Hash、上百万元素的 ZSet、几 MB 的 String。它们的问题在于「一次操作卡一次」:单线程处理大对象的序列化、删除和网络传输都会阻塞其它请求。redis-cli 提供 --bigkeys 按类型找最大键,--memkeys 则按内存占用排序。

基本信息

扫描命令redis-cli --bigkeys / redis-cli --memkeys
限速参数-i 秒数,线上扫描必加
采样深度--memkeys-samples 控制内存估算采样
精确手段MEMORY USAGE key 给出单键内存(含对象开销)
安全替代SCAN 渐进遍历,生产禁用 KEYS

典型使用场景

  • 内存告警后定位具体是哪个键占了大量空间
  • 延迟毛刺排查时验证是否存在大对象
  • 活动或大促之前做容量复核
  • 确定清理目标,避免误删业务正在使用的键
  • 拆分方案设计前的现状摸底

扫描与确认

扫描与确认
redis-cli --bigkeys                 # 各类型最大的键(按元素数量)
redis-cli --bigkeys -i 0.1          # 每扫描 100 个键休眠 0.1 秒限速
redis-cli --memkeys                 # 按内存占用排序,更贴近真实成本
redis-cli --memkeys --memkeys-samples 5
MEMORY USAGE big:hash               # 单键精确内存
HLEN big:hash                       # 元素数量,判断拆分粒度
redis-cli -h 从库IP -p 6379 --bigkeys -i 0.1   # 优先在从库上扫描

手段与注意点

手段覆盖范围注意事项
--bigkeys按元素数量给出各类型最大键只看数量,不反映内存占用
--memkeys按内存占用排序需要较新版本,采样深度可调
MEMORY USAGE单键精确内存加大采样会遍历全键,慎用
HLEN / ZCARD / SCARD元素数量快速判断是否超过阈值
SCAN渐进遍历键空间生产可用的替代方案,需自行聚合
--bigkeys 与 --memkeys 都会遍历键空间:百万键实例上不加 -i 相当于全量扫描,可能直接制造延迟毛刺。安排在低峰或从库上执行。
只看元素数量容易漏判:一个只有几条记录但每条都很长的 String 同样是大 key。判断要结合 MEMORY USAGE 与业务语义,例如单值是否超过几十 KB。
发现大 key 后不要直接用 DEL 删除:删除大对象的开销同样阻塞单线程,应改用 UNLINK 异步删除,或分批删元素后再处理空结构。

易错点

  • 高峰期全速跑 --bigkeys:制造延迟尖刺,事后被误判为网络问题
  • 只看类型长度不看内存:String 的长度并不能反映真实内存占用
  • 用 DEL 直接删大 key:删除动作本身就造成秒级阻塞
  • 在主库上扫描又不下限速:排查动作变成了新的故障源

数据来源与参考

  • Redis 官方文档: redis-cli --bigkeys
  • Redis 官方文档: 大 key 排查

相关工具

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