MEMORY 命令家族是什么
MEMORY 是 Redis 的内存诊断命令族,按目的分成四类:测量(USAGE)、诊断(DOCTOR、STATS、OVERHEAD)、维护(PURGE)与分配器细节(MALLOC-STATS)。日常巡检用 DOCTOR 加 STATS 就能覆盖大部分问题,定位到具体键或分配器层次时再往下钻。
基本信息
| 命令族 | MEMORY USAGE / DOCTOR / STATS / OVERHEAD / PURGE / MALLOC-STATS / HELP |
|---|---|
| 用途分类 | 单键测量、整体体检、分配器分析、内存归还 |
| 版本 | Redis 4.0 起逐步补齐,各子命令可读版本不同 |
| 权限 | 普通连接即可执行,PURGE 建议低峰使用 |
典型使用场景
- 内存上涨排查:先用 MEMORY DOCTOR 看结论,再用 STATS 定位分布
- 大键治理:对怀疑对象逐个执行 MEMORY USAGE 核查占用
- 分配器分析:碎片或分配开销异常时看 MALLOC-STATS 与 OVERHEAD
- 容量估算:抽样测量不同类型键的平均占用作为估算基数
- 内存归还:批量删除后想让操作系统拿回内存页,用 PURGE 向分配器请求
常用调用
常用调用
redis-cli MEMORY HELP # 列出当前版本支持的子命令
redis-cli MEMORY USAGE sample:key # 单键占用估算(默认采样 5 个元素)
redis-cli MEMORY USAGE big:hash SAMPLES 0 # 全量采样精确测量,开销更高
redis-cli MEMORY DOCTOR # 整体体检结论与建议
redis-cli MEMORY STATS # 结构化内存分布
redis-cli MEMORY PURGE # 请求分配器归还空闲页子命令对照
| 子命令 | 用途 | 使用注意 |
|---|---|---|
| MEMORY USAGE | 单键占用估算 | 容器默认只采样部分元素,大键偏差明显 |
| MEMORY DOCTOR | 整体体检与建议 | 结论是提示不是判决,需结合指标判断 |
| MEMORY STATS | 结构化内存分布 | 字段随版本变化,脚本要容错 |
| MEMORY OVERHEAD | 分配开销分桶统计 | 深入分配器层面时使用 |
| MEMORY PURGE | 请求归还空闲页 | 仅对 jemalloc 有效,效果取决于碎片情况 |
| MEMORY MALLOC-STATS | 分配器内部统计 | 输出面向分配器,可读性较差 |
USAGE 是估算:容器类型默认只采样部分元素,键越大偏差越明显;需要精确值就显式指定 SAMPLES 0,但那是遍历整个键的开销。
对大键执行 SAMPLES 0 测量、PURGE 或 MALLOC-STATS 都会带来额外开销,生产环境放在低峰执行,并对大键提前做拆分。
MEMORY 只回答内存怎么分布、单键占多少,不回答为什么涨:判断根因仍要结合 INFO 的命中率、淘汰、连接缓冲和业务侧的变更记录。