讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过Redis MEMORY USAGE命令精准分析不同数据类型的内存消耗

阿丽酱_4895

阿丽酱_4895

发布时间:2026-09-30 10:24:49

|

308人浏览过

|

来源于php中文网

原创

MEMORY USAGE返回的是jemalloc实际分配的内存总量,包含键名、值、redisObject元数据、过期字段、底层容器开销及内存对齐填充等,不等于数据本身大小,也不区分是否过期或共享。

如何通过redis memory usage命令精准分析不同数据类型的内存消耗

MEMORY USAGE 返回的不是“数据大小”,而是运行时真实分配量

MEMORY USAGE 返回的是 jemalloc 实际分配的字节数,包含键名、值数据、redisObject 元数据、过期时间字段、底层容器(如 dict / ziplist)的指针与空桶开销、内存对齐填充等。它不等于 strlen(value),也不等于序列化后的长度。

常见误判场景:

  • 一个存了 100 个字段的 hash,VALUE 总长才 2KB,但 MEMORY USAGE 返回 1.8MB —— 很可能因 hash-max-ziplist-entries 超限,已切换为 hashtable 编码,且哈希表扩容到 65536 桶,每个 dictEntry 占 32 字节以上
  • set 中存 100 万个字符串,MEMORY USAGE 显示 120MB,但 INFO memory 的 used_memory 增量是 158MB —— 差的那部分来自 jemalloc 分配块粒度(如 128 字节对齐)和 dict 结构体自身开销(96 字节固定)
  • 对已过期但未被删除的 key 执行 MEMORY USAGE,仍返回完整值 —— 它不区分是否有效,只看内存是否还被持有

为什么不能用 MEMORY USAGE 直接统计“hash 占比”或“zset 总用量”

MEMORY USAGE 不返回类型信息,也不支持批量或通配符。你无法靠它直接回答“当前 DB 中 hash 类型占用了多少内存”。

必须组合三步才能归类统计:

  • 先用 SCAN 游标遍历 key(避免阻塞,禁用 KEYS *)
  • 对每个 key 执行 TYPE 获取结构类型
  • 再执行 MEMORY USAGE 获取其字节数,本地聚合

注意:MEMORY USAGE 对不存在的 key 返回 (integer) 0,若脚本未校验 key 存在性,会把大量 miss 当成“零占用”混入统计,拉低平均值;集群环境下还需手动路由到对应节点,否则报 CROSSSLOT 错误。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载

不同数据类型的 MEMORY USAGE 行为差异

同一命令在不同结构上计算逻辑不同,直接影响结果可信度:

  • string:最接近“真实值”,主要含键名 + 值 + redisObject(16 字节)+ 过期字段(8 字节),无额外容器开销
  • hash / zset / set:取决于编码。用 DEBUG OBJECT key 查 encoding 字段:ziplist 或 intset 时内存紧凑;一旦切到 hashtable 或 skiplist,开销陡增,且 MEMORY USAGE 会反映整个结构体分配量
  • list:Redis 7+ 默认用 listpack,但若元素过多或含大 value,会转 quicklist;此时 MEMORY USAGE 包含所有 listNode 指针 + listpack 块分配 + 冗余空间
  • SAMPLES 参数仅对 set/zset/hash 生效(默认采样 5 个元素),对 string 或 list 无效 —— 传了也忽略

生产环境该怎么做才不翻车

别在高峰批量扫 key。一次调用 MEMORY USAGE 可能阻塞主线程,尤其对百万级 zset 或嵌套深的 hash。

更稳的路径是分层验证:

  • 先跑 redis-cli --bigkeys -i 0.1,快速识别各类型 top 样本(比如 hash: 421 keys, avg size 3.2MB)
  • 挑出前 3 个最大 hash key,逐个执行 MEMORY USAGE + HLEN + DEBUG OBJECT,确认是否真由字段膨胀导致,还是编码切换所致
  • 查 INFO memory 中 used_memory_human 和 DBSIZE 比值:若 DBSIZE 是 80 万但内存已达 12GB,基本可断定存在少数几个“胖 key”,不用全量扫描
  • 想导出全量分布?只在开发环境用 SCAN + TYPE + MEMORY USAGE 脚本,并设好 client-output-buffer-limit normal 256mb 128mb 60 防断连

最易被忽略的一点:它不体现共享对象。同一个字符串 value 被 10 个 key 引用,MEMORY USAGE 会算 10 次 —— 但实际内存只存一份。这点在分析 refcount > 1 的冷 key 时尤其误导。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2551

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

514

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

422

2026.02.12

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4249

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3735

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6732

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

623

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

736

2024.04.07

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

20

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn