首页/数据/Redis 进阶速查/MEMORY USAGE:单键内存测量
内存与管理99 条

MEMORY USAGE:单键内存测量

MEMORY USAGE key 返回键及其值的估算字节数,包含键对象与值对象开销,是拆解大 key 与验证优化效果的直接工具。

Redis 进阶速查数据更新于 2026-10-13

MEMORY USAGE 是什么

MEMORY USAGE key 返回一个键连同它的值在内存中占用的估算字节数,含键名、值对象、内部编码(SDS 头、dict 表项、跳表结点等)以及分配器对齐后的开销,是拆大 key、核算单键成本最直接的工具。Redis 4.0 起提供,对集合类结构可以用 SAMPLES 控制采样深度。

基本信息

命令MEMORY USAGE key [SAMPLES count]
版本Redis 4.0 及以上
单位字节
SAMPLES默认 5,设为 0 表示全量采样(更准也更慢)
支持类型string、list、hash、set、zset、stream 全类型
键不存在返回空(nil)

典型使用场景

  • 拆大 key:先按字节数排序,定位真正吃内存的键再动手拆分
  • 核算单键成本:估算一个 session 或活跃用户对象占多少字节,反推容量
  • 验证优化效果:调整 hash 分桶或元素大小后,对比优化前后的字节数
  • 确认编码是否生效:列表从紧凑编码转成普通编码时,单键体积会明显跳变
  • 配合 OBJECT FREQ:找出又大又热的键,优先治理收益最大

最小示例

最小示例
redis-cli MEMORY USAGE session:1001            # 单键的估算字节数
redis-cli MEMORY USAGE big:hash:1              # 集合类默认只采样 5 个元素
redis-cli MEMORY USAGE big:hash:1 SAMPLES 0    # 全量采样,更准但更耗时
redis-cli -n 0 MEMORY USAGE user:1             # 指定第 0 号库查询
redis-cli --memkeys                            # 全库扫描,输出内存占用排行

结果怎么用

观察含义动作
单键几百 KB典型大 key拆分或用 hash 分桶,避免单次操作阻塞
单键几十 MB严重大 key优先治理,删除用 UNLINK 或分批,别直接 DEL
元素多但字节不大小元素、高条数重点看元素数量对 O(N) 命令的影响
返回空(nil)键不存在确认键名与所选数据库
估算值含分配器对齐与对象头开销,和「元素个数乘元素大小」的直觉算法会有差距,做容量规划时以命令结果为准更稳妥。
它是单键测量,不给全库分布;要摸整体分布用 --memkeys 扫描或离线分析 RDB,线上避免 KEYS 全量遍历。
同一个键在优化前后对比才有意义:换实例、换版本(内部分配策略会变)后数值不可直接比较。做容量测算时按「键数 × 平均字节数」再留 20% 以上余量给碎片与复制缓冲。

易错点

  • 把采样结果当精确值:默认 SAMPLES 5 只抽部分元素,集合越大误差越大,要精确就加 SAMPLES 0 并接受耗时
  • 对千万级元素的大集合执行 SAMPLES 0 会遍历全部元素,可能卡住主线程,改到从库或低峰执行
  • 只测一个大键就下结论,单键分布是长尾的,至少抽样几十个键再排序
  • 测完不处理:定位到大 key 后直接 DEL 大 hash 会阻塞主线程,应改用 UNLINK 或分批删除

数据来源与参考

  • Redis 官方文档:MEMORY USAGE 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌