7.9 缓存分析
7.9.1 分析 Redis 实例大 Key 和热 Key
大Key和热Key问题是Redis使用中的常见问题,本章节主要介绍对Redis实例进行大Key 和热Key分析,通过大Key和热Key分析,可以监控到占用空间过大的Key,以及该 Redis实例存储数据中被访问最多的Key。
大Key分析使用限制和说明:
● 所有Redis实例都支持。
● 在大Key分析时,会遍历Redis实例中的所有Key,因此分析所需要时间取决于Key 的数量。
● 在进行大Key分析时,建议在业务低谷期间进行,且不要与配置的自动备份时间重 叠。
● 如果是主备和集群实例,大Key分析是对备节点的分析,对实例性能影响较小。如 果是单机实例,由于只有一个节点,是对主节点进行分析,客户访问性能会略有 影响(不高于10%),所以建议在业务低谷期进行大Key分析。
● 对于大Key分析结果,每个Redis实例默认最多保存100条记录(string类型保存 top20,list/set/zset/hash类型保存top80),当超过100条记录时会默认删除最老 的分析记录,而存入最新的记录。同时,支持用户在控制台上手动删除无用的大 Key分析记录。
热Key分析使用限制和说明:
● 只有Redis 4.0/Redis 5.0和Redis 6.0实例支持,并且实例maxmemory-policy参数 必须配置为allkeys-lfu或者volatile-lfu。
● 在热Key分析时,会遍历Redis实例中的所有Key,因此分析所需要时间取决于Key 的数量。
● 配置自动热key分析时,要考虑不要在业务高峰期进行,避免影响业务,同时也不 要过了高峰期太久,避免分析结果不准确。
● 热key分析是对于主节点的分析,在进行分析时,客户访问性能会略有影响(不高 于10%)。
● 对于热Key分析结果,每个Redis实例默认最多保存100条记录。当超过100条记录 时会默认删除最老的分析记录,而存入最新的记录。同时,支持用户在控制台上 手动删除无用的热Key分析记录
说明
建议在业务低峰时段执行大Key和热Key分析,降低CPU被用满的可能。
大 Key 分析操作步骤
步骤1 登录分布式缓存服务管理控制台。
步骤2 在管理控制台左上角单击 ,选择区域和项目。
说明
此处请选择与您的应用服务相同的区域。
步骤3 单击左侧菜单栏的“缓存管理”,进入实例信息页面。
步骤4 单击需要缓存分析的Redis实例名称,进入该实例的基本信息页面。
步骤5 选择“分析与诊断 > 缓存分析”进入“缓存分析”页面。
步骤6 单击“大Key分析”,您可以立即对实例进行大Key分析或者设置定时任务,每日自动 分析。
步骤7 当分析任务结束后,可以单击分析列表“操作”列的“查看”,查看分析结果。
您可以查询当前实例不同数据类型的大Key分析结果。
说明
分析结果中,string类型显示top20的记录,list/set/zset/hash类型显示top80的记录。具体分析 记录,请以实际返回结果为准。
图7-2 查看大 Key 分析结果(string 类型)
图7-3 查看大 Key 分析结果(list/set/zset/hash 类型)
----结束
热 Key 分析操作步骤
步骤1 登录分布式缓存服务管理控制台。
步骤2 在管理控制台左上角单击 ,选择区域和项目。
说明
此处请选择与您的应用服务相同的区域。
步骤3 单击左侧菜单栏的“缓存管理”,进入实例信息页面。
步骤4 单击需要缓存分析的Redis实例名称,进入该实例的基本信息页面。
步骤5 选择“分析与诊断 > 缓存分析”进入“缓存分析”页面。
步骤6 单击“热Key分析”,您可以对实例进行热Key分析或者设置定时任务,每日自动分 析。
说明
如果是2020年7月之前创建的Redis实例,且没有修改过该参数,则maxmemory-policy默认值为 noeviction,您需要先将参数配置为allkeys-lfu或者volatile-lfu,才能执行热Key分析。如果是 2020年7月之后创建的实例,maxmemory-policy默认值都为volatile-lru,您需要先将参数配置 为allkeys-lfu或者volatile-lfu,才能执行热Key分析。allkeys-lfu和volatile-lfu的具体介绍请参考 逐出策略。
步骤7 当分析任务结束后,可以单击分析列表“操作”列的“查看”,查看分析结果。
您可以查询当前实例的热Key分析结果。
说明
热Key分析结果,每个Redis实例默认显示top100的记录。
图7-4 查看热 Key 分析结果
表7-6 热 Key 分析结果参数说明
参数名称 参数说明
Key名称 热Key的名称。
类型 热Key的类型,包括String、Hash、List、Set、Sorted Set 等数据类型。
参数名称 参数说明
大小 热Key的Value的大小。
频度 表示某个key在一段时间(一般指1分钟)的访问频度,会 随着访问的频率而变化,具体介绍参见Redis官网。
该值并不是简单的访问频率值,而是一个基于概率的对数计 数器结果,最大为255(可表示100万次访问),超过255后如 果继续频繁访问该值并不会继续增大,同时默认如果每过一 分钟没有访问,该值会衰减1。
分片 热Key所在的分片。
说明
只有集群实例存在该参数。
DataBase 热Key所在的DB。
----结束
大 Key 和热 Key 的常见问题
● 问题1:Redis Cluster集群实例级别容量和性能未达到瓶颈,但某个分片容量或 性能已过载?
● 问题2:单个Key过大,有什么影响?
● 问题3:单个Key负载过大(热Key),有什么影响?
● 问题4:为了减少大Key和热Key过大,有什么使用建议?
● 问题5:为什么Redis3.0实例没有热Key功能?