当前位置:首页 > 文章列表 > 数据库 > Redis > Redis MEMORY USAGE 怎样估算键的内存占用

Redis MEMORY USAGE 怎样估算键的内存占用

来源:17golang原创 2026-10-26 01:53:21 0浏览 收藏

用MEMORY USAGE key可以取得Redis为这个键及其值分配的内存字节数,包含相关管理开销。对于嵌套数据结构,它可能通过采样估算总量;SAMPLES控制样本数量,默认5,0表示遍历全部嵌套值。生产排查应先用有限采样定位候选,再决定是否值得扩大采样。

官方地址:https://redis.io/

明确要量的是键还是整个进程

例如订单详情缓存只保存几百字节JSON,MEMORY USAGE返回值仍可能更大。键名、对象表示、内部结构和分配器带来的开销都使“业务字节数”与“内存分配”不同。不要把该命令当成JSON长度统计器,也不要用某台机器测得的常数给所有键套公式。

问题观察对象不能直接推导的内容
哪个缓存键更占空间MEMORY USAGE整个进程的RSS
字符串内容有多长STRLEN对象和键名的全部开销
实例内存为何增长INFO memory、MEMORY STATS某个业务键独占的全部进程成本
业务数据与单键内存分配范围结构说明图
结构说明图:单键内存包含值及相关管理分配,进程还有其他内存对象;不是运行截图。

跨版本、不同位数、分配器和内部编码比较时,需要记录环境差异。即使业务字段完全一致,也不能假定返回字节数一致。

在受控连接中读取单键字节数

在已有认证和TLS配置的redis-cli连接方式上查询已知键,不要为排查把服务暴露到公网。下面假设本地测试实例使用6379端口、0号库,示例没有创建数据或执行真实请求:

# 数据库选择影响查询对象;生产连接沿用已有认证与TLS配置。
redis-cli -p 6379 -n 0 TYPE 'cache:order:681'
redis-cli -p 6379 -n 0 MEMORY USAGE 'cache:order:681'
# PTTL辅助判断该键是否很快过期,不改变过期时间。
redis-cli -p 6379 -n 0 PTTL 'cache:order:681'

返回整数的单位是字节。键不存在时返回空值,不能把空值写成“占用0字节”。TYPE、内存查询和PTTL是不同命令,期间键可能过期、被删除或重建,因此不要把三条结果描述成同一时刻的原子快照。

集群环境需使用能够路由单键请求的连接或客户端;redis-cli可按部署方式启用-c处理重定向。Redis Cluster使用0号库,不能照搬独立实例中的非零数据库参数。

按集合规模选择采样数量

对大型哈希、列表等嵌套结构,有限样本会影响估算精度。元素大小相近时小样本有参考价值;少数超长字段混在大量短字段中时,小样本可能不足以代表总体。增加样本不改变业务数据,但会增加服务端工作量。

# 先取有限样本,用于候选键的初步估算。
redis-cli -p 6379 -n 0 MEMORY USAGE 'cache:order:681' SAMPLES 20
# 仅在允许的低峰窗口,对已评估规模的单个候选遍历全部嵌套值。
redis-cli -p 6379 -n 0 MEMORY USAGE 'cache:order:681' SAMPLES 0

SAMPLES 0不是“零采样、立即返回”,而是全部取样。全量遍历也不等于操作系统级精确测量;它改变嵌套值的采样范围,命令仍报告Redis内部的内存分配口径。紧凑编码等实现细节也会影响采样选项带来的实际差异。

有限采样与全部嵌套值的范围关系结构说明图
结构说明图:少量样本属于嵌套值集合,全部取样覆盖该集合;没有表示真实运行耗时或测量结果。

连接超时不保证服务端立即停止该次遍历。对未知规模的键,先确认业务边界与规模信息,再决定是否做全量测量,不能以客户端超时设置代替服务端工作预算。

限定权限和采集范围

MEMORY USAGE属于只读但可能较慢的诊断命令。采集账号只获得所需子命令及指定业务键范围,不应为了它直接授予全部管理命令。Redis ACL可按子命令授权,具体规则由管理员结合实际版本、既有用户权限和部署策略配置;只读并不代表没有延迟影响。

批量采集优先使用业务侧提供的少量候选键,避免直接KEYS遍历整个实例。如果确需SCAN发现候选,限定目标前缀、总键数、执行时段和命令频率。SCAN的COUNT是工作量提示而不是严格批量上限;扫描可能返回重复键,采集器需按预算处理,不能把重复记录反复加总。

监控记录键名时注意其中是否包含个人标识。常规日志可只保存业务类型和脱敏标识,保留样本参数、采集时间、节点与数据库即可。权限拒绝、连接超时应记录为错误,不能归入“键不存在”。

记录结果并判断优化是否有效

每次记录键类型、字节数、SAMPLES参数、时间及Redis环境。比较改造前后时保持样本参数一致,并尽量使用相近的数据规模。若删除了字段但占用没有线性下降,应考虑分配档位和内部编码变化,而不是立即断言命令失效。

假设某键返回1048576字节,可按1024换算为1024 KiB或1 MiB;这是单位换算示例,不是本次实测。抽查十个大键的和只代表这十个观测对象,不能直接推算整个实例或容器预算。复制缓冲、客户端缓冲、分配器保留内存等仍需结合实例指标解释。

为什么和DUMP得到的长度不一样?

DUMP是序列化表示,MEMORY USAGE是内存分配口径,两者用途不同。

为什么增加SAMPLES后数值改变?

嵌套值大小分布不均以及查询间的数据变化都可能影响结果。先保持数据条件和参数一致,再讨论差异。

为什么删键后RSS没马上下降?

释放对象与分配器将内存归还操作系统不是同一过程;应结合MEMORY STATS和INFO memory看实例整体,而不能据此否认单键查询。

官方资料:MEMORY USAGE参数与返回值、MEMORY STATS实例内存指标。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Redis SET NX EX 怎样避免先写后设过期Redis SET NX EX 怎样避免先写后设过期
上一篇
Redis SET NX EX 怎样避免先写后设过期
Redis Pub/Sub 与 Streams 怎样按是否持久化选择
下一篇
Redis Pub/Sub 与 Streams 怎样按是否持久化选择
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    693次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    706次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    774次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    734次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    568次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码