内存分析(大 Key 分析)

最近更新时间:2026-03-30 16:49:11

我的收藏
Distributed Cache 的集群模式在 slot 分片不均匀的情况下,可能出现数据和查询的倾斜情况,部分有大 Key 的 Redis 节点既占用比较多的内存,也可能占用比较多的网卡资源,造成 Distributed Cache 阻塞。
内存分析主要针对数据库存储的大 Key 进行分析,动态展示实例内存使用率的变化趋势,实时统计 Top100 大 Key 的内存占用、元素数量与长度、过期时间等,可帮助运维人员快速识别出大 Key,进行拆分或过期清理,及时调优数据库的性能,避免因大 Key 造成服务性能下降、内存不足等问题引起的业务阻塞。

内存分析使用说明

内存分析提供周期性大 Key 分析即时大 Key 分析两种方式:
周期性大 Key 分析:首次使用大 Key 分析,在实例管理页面开启大 Key 分析功能,开启后,系统会在第二天自动发起大 Key 分析任务,并在内存分析 > 大 Key 分析中显示分析结果。后续每天例行进行一次分析任务,并更新数据结果。
开启大 Key 分析功能和查看大 Key 分析结果具体操作请参见 开启大 Key 分析查看大 Key 分析结果
即时大 Key 分析:创建即时大 Key 分析任务后,会立即自动生成一次备份,因为获取的是最新的数据,生成的分析结果可在即时大 Key 分析页签任务列表中查看,也可在大 Key 分析页签中查看,分析结果默认保存30天。
若创建即时大 Key 分析任务前,在实例管理页面未开启大 Key 分析功能,则大 Key 分析页签下的数据为首次展示。
创建即时大 Key 分析任务和查看大 Key 分析结果具体操作请参见 创建即时大 Key 分析任务查看大 Key 分析结果

使用限制

存储大于100GB的 Distributed Cache 实例不支持周期性大 Key 分析,可通过创建即时大 Key 分析任务进行内存分析。
大 Key 分析结果中,Key 名称最大支持1024字节(对应十六进制表示最大4096字符)。超过该长度的 Key 名称将被截断显示。

开启大 Key 分析(周期性大 Key 分析

1. 登录 DBbrain 控制台
2. 开启大 Key 分析功能。
2.1 在实例列表页面开启实例的大 Key 分析功能
2.1.1 在左侧导航栏,选择实例管理,选择 Distributed Cache 实例。
2.1.2 通过以下三种方式,开启大 Key 分析功能。
方式一:在实例列表勾选待开启大 Key 分析功能的实例,在页面左上方单击批量设置

方式二:在待开启实例对应的状态列,单击


方式三:在待开启实例对应的操作列,单击配置

2.2 在内存分析页面开启实例的大 Key 分析功能
2.2.1 在左侧导航栏,选择诊断优化
2.2.2 选择内存分析 > 大 Key 分析,选择 Distributed Cache 数据类型和实例 ID。
2.2.3 在页面右上方单击周期性分析设置。

或在页面下方的任一 Top100 列表中单击开启周期性分析

3. 在弹窗的对话框中开启 Top100 大 Key 分析,并指定分隔符,单击确定

说明:
开启 Top100 大 Key 分析 后,诊断优化 > 内存分析 > 大 Key 分析页签将按照 Top100 大 Key(按内存)Top100 大 Key(按数量)Top100 Key 前缀、Top100 未设置过期大 Key(按内存)Top100 未设置过期大 Key(按数量)五个维度展示大 Key 分析结果。
指定分隔符后,Top100 Key 前缀将根据指定的分隔符统计分隔后的 Key 前缀信息,并对统计出的 Key 前缀按照内存大小进行排序。

创建和查看即时大 Key 分析任务

1. 登录 DBbrain 控制台
2. 在左侧导航栏,选择诊断优化。
3. 在页面上方选择 Distributed Cache 实例。
4. 选择内存分析页签,选择即时大 Key 分析

5. 单击创建任务,在弹出的对话框中选择分隔符、选择分片编号,单击确认
注意:
标准架构实例:仅需要选择分隔符,任务启动后,创建一个 Distributed Cache 备份任务,基于备份数据进行大 Key 分析,默认保存30天分析结果。如果数据量过大,可能会导致分析任务失败。
集群架构实例:需要选择分隔符和分片,任务启动后,会根据您选择的分片创建一个 Distributed Cache 备份任务,基于备份数据进行大 Key 分析,默认保存30天分析结果。如果数据量过大,可能会导致分析任务失败。

可在操作列单击查看全部节点,查看所有节点 ID。
6. 在任务列表中,查看任务进度。
说明:
在任务创建过程当中,需要终止任务,可在操作列单击终止,在弹出的对话框中单击确认
7. 当任务进度为已完成时,在操作列,单击查看,在右侧弹窗查看任务分析结果。
任务分析结果从 Key 过期时间分布(内存)Key 过期时间分布(数量)、Top100 大 Key(按内存)Top100 大 Key(按数量)Top100 Key 前缀、Top100 未设置过期大 Key(按内存)Top100 未设置过期大 Key(按数量)维度展示大 Key 分析结果,并支持从实例和分片两个维度查看大 Key 分析结果。
说明:
即时大 Key 分析任务生成的分析结果,也可在大 Key 分析页签中查看。查看说明及操作请参见 查看大 Key 分析结果

任务列表操作列还支持以下操作:
下载任务分析结果:单击下载,下载格式为 .csv 的 Top100 大 Key 的分析结果。
删除即时大 Key 分析任务
单个删除:单击删除,在弹出的对话框中单击确认
批量删除:在任务列表选择任务,在列表上方单击删除,在弹出的对话框中单击确认

查看大 Key 分析结果

1. 登录 DBbrain 控制台
2. 在左侧导航栏,选择诊断优化。
3. 在页面上方选择 Distributed Cache 实例。
4. 选择内存分析页签,选择大 Key 分析页签,选择实例或分片(仅集群架构实例涉及)。

5. 查看大 Key 分析结果,包括近30天内存使用率趋势图、Key 过期时间分布和 Top100 大 Key 统计信息。
说明:
近30天内存使用率的趋势图上,默认展示近30天实例内存使用率的变化趋势,在日期横轴上单击某一天,会固定时间轴,Key 过期时间分布和 Top100 大 Key 列表会联动展示统计信息,快速找到该时间占用内存高的大 Key 数据。

近30天内存使用率
支持按照实例和分片维度进行查看历史30天的内存情况。
在时间轴选择某一时间段,可放大查看该时间区间内存使用率的变化趋势。
Key 过期时间分布
Key 的过期时间分布从内存占用​和 ​Key 数量​两个维度统计,覆盖未设置过期​和​已设置过期​的 Key(过期时间包括3~12小时、1-3天和大于7天)。
Top100的 大 Key数据类型的下拉列表中,选择数据存储类型,查看 Top100 大 Key 的信息,包括:占用内存、元素数量、最大元素长度、平均元素长度及过期时间戳等信息。
Top100 大 Key(按内存):按照大 Key 内存占比由高至低统计 Top100 的大 Key。
Top100 大 Key(按数量):按照大 Key 元素数量由多至少统计 Top100 的大 Key。

Top100 Key 前缀:按照大 Key 前缀的内存占比由高到低进行统计 Top100 的大 Key 前缀。

Top100 未设置过期大 Key(按内存):按照未设置过期大 Key 的内存占比由高到低进行统计 Top100 的大 Key。

Top100 未设置过期大 Key(按数量):按照未设置过期大 Key 的数量占比由高到低进行统计 Top100 的大 Key。

鼠标悬停至 Key 名称处支持复制 Key 、复制十六进制和查看 Key 详情。其中,复制的 Key 十六进制,可在 Redis-cli 工具中直接使用。

6. 在列表右上方单击

,下载格式为 .csv 的文件。

查看大 Key 详情

在大 Key 分析结果列表中,您可以查看每个 Key 的详细信息并执行相关操作。

Key 名称显示说明

由于 Redis 的 Key 支持二进制安全存储,当 Key 名称包含非 ASCII 字符(如序列化数据、压缩内容、二进制协议数据等)时,分析结果中的 Key 名称可能显示为乱码或不可读字符。这属于正常现象,不影响对该 Key 的分析和操作。

查看和复制 Key 的十六进制

针对包含非 ASCII 字符或显示为乱码的 Key,DBbrain 支持查看和复制该 Key 的十六进制(HEX)表示,方便您在 Redis-cli 等工具中直接使用。例如 \\x48\\x65\\x6c\\x6c\\x6f 对应 ASCII 字符串 Hello
1. 在大 Key 分析结果列表中,找到目标 Key 条目。
2. 鼠标悬停至 Key 名称处,单击复制十六进制,将十六进制格式的 Key 名称复制到剪贴板。
大 Key 分析结果中,Key 名称最大支持 1024 字节(对应十六进制表示最大4096字符)。超过该长度的 Key 名称将被截断显示。

3. 在 Redis-cli 中使用复制的十六进制 Key 进行后续操作,示例如下:
# 进入 Redis-cli 交互模式
redis-cli

# 查看 Key 是否存在
EXISTS "\\xAC\\xED\\x00\\x05\\x74\\x00\\x2A\\x63\\x6F\\x6D\\x2E\\x6E\\x65\\x77\\x74\\x76\\x2E\\x69\\x6E\\x74\\x65\\x67\\x72\\x61\\x6C\\x2E\\x63\\x6F\\x72\\x65\\x2E\\x6D\\x61\\x70\\x70\\x65\\x72\\x2E\\x50\\x61\\x72\\x74\\x79\\x4D\\x61\\x70\\x70\\x65\\x72"
(integer) 1

# 查看 Key 对应的值
GET "\\xAC\\xED\\x00\\x05\\x74\\x00\\x2A\\x63\\x6F\\x6D\\x2E\\x6E\\x65\\x77\\x74\\x76\\x2E\\x69\\x6E\\x74\\x65\\x67\\x72\\x61\\x6C\\x2E\\x63\\x6F\\x72\\x65\\x2E\\x6D\\x61\\x70\\x70\\x65\\x72\\x2E\\x50\\x61\\x72\\x74\\x79\\x4D\\x61\\x70\\x70\\x65\\x72"
"test2"

# 查看 Key 的数据类型
TYPE "\\xAC\\xED\\x00\\x05\\x74\\x00\\x2A\\x63\\x6F\\x6D\\x2E\\x6E\\x65\\x77\\x74\\x76\\x2E\\x69\\x6E\\x74\\x65\\x67\\x72\\x61\\x6C\\x2E\\x63\\x6F\\x72\\x65\\x2E\\x6D\\x61\\x70\\x70\\x65\\x72\\x2E\\x50\\x61\\x72\\x74\\x79\\x4D\\x61\\x70\\x70\\x65\\x72"

# 查看 Key 的剩余过期时间
TTL "\\xAC\\xED\\x00\\x05\\x74\\x00\\x2A\\x63\\x6F\\x6D\\x2E\\x6E\\x65\\x77\\x74\\x76\\x2E\\x69\\x6E\\x74\\x65\\x67\\x72\\x61\\x6C\\x2E\\x63\\x6F\\x72\\x65\\x2E\\x6D\\x61\\x70\\x70\\x65\\x72\\x2E\\x50\\x61\\x72\\x74\\x79\\x4D\\x61\\x70\\x70\\x65\\x72"
说明:
必须在 Redis-cli 的交互模式下执行命令(即先运行 redis-cli 进入交互模式),而不是直接在 Shell 中通过 redis-cli GET "\\x..." 方式执行。直接在 Shell 中调用 redis-cli 命令时,Shell 会对 \\x 转义字符进行默认处理,导致无法正确命中目标 Key。
如果使用各语言实现的 Redis Client(如 Jedis、go-redis、redis-py 等),需要自行将十六进制字符串转换为对应的二进制字节数据,再传入 Redis 命令,即可正确操作对应 Key。

常见问题

大 Key 分析结果中的 Key 名称为什么显示为乱码?

Redis 的 Key 支持二进制安全存储。当应用程序使用序列化框架(如 Protobuf、Thrift、Kryo 等)或压缩算法对 Key 进行编码时,Key 名称中会包含非 ASCII 字符,导致在页面上显示为乱码。这属于正常现象,不影响功能使用。
您可以通过 DBbrain 提供的16进制查看与复制功能,获取该 Key 的准确16进制表示,并在 Redis-cli 中直接使用该值进行操作。具体步骤请参见 查看和复制 Key 的十六进制