首页/数据/数据库速查/MEMORY USAGE / STATS 精确诊断
Redis 运维与场景124 条

MEMORY USAGE / STATS 精确诊断

MEMORY USAGE 给单键真实内存(含开销),MEMORY STATS 给全局分布;排查大 key 与容量核算的正确工具。

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

精确诊断内存

MEMORY USAGE 给出单个键的真实内存占用,包含数据本身与对象开销;MEMORY STATS 给出全局的内存分布,例如数据集大小与历史峰值;MEMORY DOCTOR 输出一句人话诊断。它们是排查大 key 与做容量核算的正确工具——用 STRLEN 或 HLEN 估算只能得到业务数据长度,完全没有算上哈希表、字典与对象本身的开销。

基本信息

MEMORY USAGE key单键内存占用,可用 SAMPLES 控制采样深度
SAMPLES 0全量精确统计,大对象上会明显变慢
MEMORY STATS全局内存分布视图,用于容量规划
MEMORY DOCTOR一句话诊断建议
MEMORY PURGE尝试让分配器归还内存,效果通常有限

典型使用场景

  • 给业务定义单个键的内存预算
  • 内存告警时确认具体是哪个键的占用异常
  • 核对容量估算与真实占用之间的差距
  • 清理大 key 前后对比实际节省了多少内存
  • 评估结构改造能省下多少空间

常用子命令

常用子命令
MEMORY USAGE user:1001            # 单键字节数(默认抽样估算)
MEMORY USAGE huge:zset SAMPLES 0  # 全量精确,大对象上很慢
MEMORY STATS                      # 全局分布:dataset.bytes、peak.allocated 等
MEMORY DOCTOR                     # 一句话诊断
MEMORY PURGE                      # 尝试归还碎片(jemalloc)
INFO memory | grep -E "used_memory_human|mem_fragmentation_ratio"

命令与适用场景

命令返回内容适用场景
MEMORY USAGE单键字节数判断某个键是否属于大 key
SAMPLES 参数采样深度0 表示全量精确,代价是变慢
MEMORY STATS聚合视图容量规划与趋势观察
MEMORY DOCTOR文字建议快速定位排查方向
MEMORY PURGE尝试归还碎片效果受分配器行为影响
INFO memory整体水位与碎片率监控大盘使用
给业务定义「单键内存预算」要用 MEMORY USAGE,而不是字符串长度:对象与哈希表的固定开销在小对象上占比很高,用长度估算的偏差可能成倍。
对大集合执行 MEMORY USAGE 并且把采样设为 0 会很慢:它会遍历全部元素做精确统计,在生产实例上可能造成可观的阻塞,低峰或副本上执行更安全。
监控大盘中 used_memory 与 RSS 的差异属于碎片与分配器缓存,不必看到差异就紧张;结合碎片率一起判断,结论才可靠。

易错点

  • 用 STRLEN 或 HLEN 估算内存:不含对象与哈希表开销,偏差很大
  • 对大集合做全量采样统计:阻塞单线程,影响线上请求
  • 只看单个键不看整体水位:容量问题往往是总量与淘汰策略共同造成的
  • 指望 MEMORY PURGE 立刻见效:碎片归还受分配器影响,通常效果有限

数据来源与参考

  • Redis 官方文档: MEMORY USAGE
  • Redis 官方文档: MEMORY STATS

相关工具

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