memory doctor 仅报告已知内存问题模式,无法定位具体键或业务逻辑,但能快速筛查客户端缓冲区积压、内存碎片失控、大键误用三类高发陷阱;需重点关注输出中含“warning”或“suggestion”的行,如缓冲区超限、大键提示等。

MEMORY DOCTOR 不是万能诊断器,它只报告已知模式的内存问题,且无法定位具体键或业务逻辑——但能快速筛出三类高发陷阱:客户端缓冲区积压、内存碎片失控、大键误用。
MEMORY DOCTOR 输出里哪些行值得立刻关注
执行 redis-cli memory doctor 后,输出是纯文本描述,没有结构化字段。真正需要盯住的是带“warning”或“suggestion”的段落:
-
clients normal buffer is 42MB—— 如果远超你平均请求响应大小(比如单次响应通常 -
allocator fragratio is 1.87—— 超过 1.5 就该警惕;若同时used_memory_rss / used_memory> 1.6,基本可判定碎片已影响吞吐 -
big key found: user:session:xxx (type=hash, size=12.4MB)—— 这不是精确值(MEMORY USAGE才准),但提示你该类型键存在异常规模
为什么 MEMORY DOCTOR 有时不报错却仍有泄漏
它不跟踪 total.allocated 的时间序列变化,也不检查过期键未被及时回收的场景。常见漏网情况包括:
- 设置了
EXPIRE但 Redis 正在低频惰性删除(maxmemory-policy为noeviction且无主动触发) - 使用了
SCAN+DEL批量清理,但 SCAN 游标中断后残留大量未删键 -
replication.buffer在主从断连重连时暴涨,DOCTOR 只在当前快照中看是否“稳定高位”,不对比历史
这类问题必须配合 MEMORY STATS 定期采样,观察 total.allocated 和 dataset.bytes 的差值是否单向扩大。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
结合 rdb-tools 做闭环验证
DOCTOR 提示“big key”后,别直接信它的估算。用 rdb -c memory 解析 RDB 文件,导出 CSV 再排序:
rdb -c memory /var/lib/redis/dump.rdb --bytes 1024 -f mem_report.csv
然后用 sort -t, -k4 -nr mem_report.csv | head -20 查真实 top20 占用键。你会发现:
- DOCTOR 报的
user:session:xxx实际只有 2MB,而 CSV 里排第一的是log:batch:20260902(18MB,list 类型)——这是定时归档逻辑缺陷 - CSV 中大量
cache:*:tmp键encoding是hashtable而非ziplist,说明写入时字段数超阈值,结构没压缩
DOCTOR 的价值在于把“内存涨了但不知哪出问题”压缩成三个可验证方向;真要定位到某一行代码埋的雷,还得靠 RDB 离线分析 + 业务 key 命名规范追溯。










