MEMORY USAGE 的采样口径
MEMORY USAGE 给出单个键占用的总内存,包含对象头、键名与数据结构开销。对集合类结构(哈希、列表、集合、有序集合),单个元素的平均开销并不固定,命令通过采样来估算:SAMPLES 指定采样元素数,默认 5 个,SAMPLES 0 表示全量遍历得到精确值。估算快、精确慢,取舍取决于你要的是趋势还是台账数字。
基本信息
| 语法 | MEMORY USAGE <key> [SAMPLES <count>] |
|---|---|
| 默认采样数 | 5 个元素 |
| SAMPLES 0 | 全量遍历,结果精确但耗时随元素数量增长 |
| 适用范围 | 采样只对集合类结构有意义 |
| 使用建议 | 大键定位用默认值,容量审计用 0 |
两种口径的取舍
| 用法 | 精度 | 成本与场景 |
|---|---|---|
| 默认采样 | 估算值,与真实值可能有偏差 | 巡检与趋势观察 |
| 提高采样数 | 偏差更小 | 需要更稳的判断但仍不想全量扫 |
| SAMPLES 0 | 精确 | 容量审计与单键对账,需评估耗时 |
| 键不存在 | 返回空结果 | 先确认键存在与类型再解读 |
示例
示例
redis-cli MEMORY USAGE big:zset # 默认采样估算
redis-cli MEMORY USAGE big:zset SAMPLES 10 # 提高采样数
redis-cli MEMORY USAGE big:zset SAMPLES 0 # 全量遍历,精确但慢
redis-cli ZCARD big:zset # 先看元素数量,判断是否值得全量
redis-cli --bigkeys # 批量找候选键,再逐个精测典型使用场景
- 大键定位:先批量筛候选,再对个别键精测
- 容量台账:用精确口径记录关键键的开销
- 拆分前后对比:确认改造是否真的省了内存
- 采样偏差评估:对比默认采样与全量结果,判断能不能省这一步
- 单键开销核对:排查个别键异常占用的原因
线上实例慎用 SAMPLES 0 扫描超大集合:全量遍历会长时间占用主线程,安排在从库或业务低峰执行更稳妥。
估算值与精确值要在记录里分开标注,避免同一份容量台账里两种口径的数字混用。
把采样估算值当精确值上报容量,偏差会在超大键上被放大;对外给出的容量数字应标注统计口径。