更新时间:2024-09-30 GMT+08:00

查找Redis实例大Key和热Key

大Key和热Key是Redis使用中经常遇到的问题,本章节主要介绍DCS管理控制台的大Key和热Key分析功能,通过该功能可以分别监控到Redis实例中占用空间最大的Key和存储数据中被访问最多的Key。

  • 大Key可以分为两种情况:
    • Key的Value占用存储空间较大。一般单个String类型的Key大小达到10KB,或者集合类型的Key总大小达到50MB,则被定义为大Key。
    • Key的元素数量较多。一般集合类型的Key中元素超过5000个,则被定义为大Key。
  • 热Key通常指当一个Key的访问频率或资源占用显著高于其他Key时,则称之为热Key。例如:
    • 某个集群实例一个分片每秒处理10000次请求,其中有3000次都是操作同一个Key。
    • 某个集群实例一个分片的总带宽使用(入带宽+出带宽)为100Mbits/s,其中80Mbits是由于对某个Hash类型的Key执行HGETALL所占用。

约束与限制

大Key分析使用限制和说明:

  • 在大Key分析时,会遍历Redis实例中的所有Key,因此分析所需要时间取决于Key的数量。
  • 如果要进行大key分析,建议在业务低谷期间进行,且不要与配置的自动备份时间重叠。
  • 如果是主备、读写分离和集群实例,大Key分析是对备节点的分析,对实例性能影响较小。如果是单机实例,由于只有一个节点,是对主节点进行分析,客户访问性能会略有影响。
  • 对于大Key分析任务,每个Redis实例默认最多保存100次分析任务的记录,当超过100条记录时会默认删除最老的分析记录,而存入最新的记录。同时,支持用户在控制台上手动删除无用的大Key分析记录。

热Key分析使用限制和说明:

  • 只有Redis 4.0及以上版本的实例支持热Key分析。
  • 实例maxmemory-policy参数必须配置为allkeys-lfu或者volatile-lfu。
  • 在热Key分析时,会遍历Redis实例中的所有Key,因此分析所需要时间取决于Key的数量。
  • 配置自动热key分析时,不要在业务高峰期进行,避免影响业务,同时也不要过了高峰期太久,避免分析结果不准确。
  • 热Key分析是对实例主节点的分析,在进行分析时,客户访问性能会略有影响。
  • 对于热Key分析任务,每个Redis实例默认最多保存100次分析任务的记录。当超过100条记录时会默认删除最老的分析记录,而存入最新的记录。同时,支持用户在控制台上手动删除无用的热Key分析记录。

执行大Key和热Key分析会消耗CPU,建议在业务低峰时段执行大Key和热Key分析,降低CPU被用满的可能。

分析查找大Key

  1. 登录分布式缓存服务管理控制台
  2. 在管理控制台左上角单击,选择实例所在的区域。
  3. 单击左侧菜单栏的“缓存管理”,进入实例信息页面。
  4. 单击需要缓存分析的Redis实例名称,进入该实例的基本信息页面。
  5. 选择“分析与诊断 > 缓存分析”进入“缓存分析”页面。
  6. 在“大Key分析”页签下,您可以选择立即对实例进行大Key分析或者设置定时任务,每日自动分析。
  7. 当分析任务结束后,单击分析列表“操作”列的“查看”,您可以查询当前实例不同数据类型的大Key分析结果。

    单击分析列表“操作”列的“下载”或“删除”,也可以下载或删除分析结果。

    大Key分析结果显示数据大小最大的前100条Key记录(string类型显示20条,list/set/zset/hash类型显示80条)。

    图1 查看大Key分析结果(string类型)
    图2 查看大Key分析结果(list/set/zset/hash类型)
    表1 大Key分析结果参数说明

    参数名称

    参数说明

    Key名称

    大Key分析结果中Key的名称。

    类型

    Key的类型,包括String、Hash、List、Set、ZSet等数据类型。

    大小

    Key的Value大小,单位为:Bytes。

    数量

    Key中元素的数量,仅list/set/zset/hash类型的数据显示该参数。单位为:Counts。

    Database

    Key所在的Database。

分析查找热Key

  1. 登录分布式缓存服务管理控制台
  2. 在管理控制台左上角单击,选择实例所在的区域。
  3. 单击左侧菜单栏的“缓存管理”,进入实例信息页面。
  4. 单击需要缓存分析的Redis实例名称,进入该实例的基本信息页面。
  5. 选择“分析与诊断 > 缓存分析”进入“缓存分析”页面。
  6. 在“热Key分析”页签下,您可以选择立即对实例进行热Key分析或者设置定时任务,每日自动分析。

    如果是2020年7月之前创建的Redis实例,且没有修改过该参数,则maxmemory-policy默认值为noeviction,如果是2020年7月之后创建的实例,maxmemory-policy默认值为volatile-lru。您需要先将maxmemory-policy参数配置为allkeys-lfu或者volatile-lfu,才能执行热Key分析。您可以在“实例配置>参数配置”下修改参数。allkeys-lfu和volatile-lfu的具体介绍请参考逐出策略

  7. 当分析任务结束后,单击分析列表“操作”列的“查看”,可以查询当前实例的热Key分析结果。

    单击分析列表“操作”列的“下载”或“删除”,也可以下载或删除分析结果。

    热Key分析结果,显示在分析时间段内被访问频度最高的前100条Key记录。

    图3 查看热Key分析结果
    表2 热Key分析结果参数说明

    参数名称

    参数说明

    Key名称

    热Key分析结果中Key的名称。

    类型

    Key的类型,包括String、Hash、List、Set、Zset等数据类型。

    大小

    Key的Value的大小,单位为:Bytes。

    频度

    表示Key在一段时间(一般指1分钟)的访问频度,会随着访问的频率而变化。

    该值并不是简单的访问频率值,而是一个基于概率的对数计数器结果,最大为255(可表示100万次访问),超过255后如果继续频繁访问该值并不会继续增大,同时默认如果每过一分钟没有访问,该值会衰减1。

    分片

    Key所在的分片。

    说明:

    只有集群实例显示该参数。

    Database

    Key所在的DB。