概述

本文主要介绍如何使用redis-cli的“—bigkeys”选项查找大Key。

详细信息

背景信息

当一个简单Key的Value过大或List、Hash等类型的数据中存储了大量的元素时,读取、删除这些数据的操作可能会花费过多的时间,阻塞单线程的Redis服务。此时您需要对内存结构进行优化,找出大Key并进行调整。查找大Key的方法多种多样,您可以根据业务需求选择最适合的方案。

前提条件

  • 拥有与Redis实例互通的ECS实例。
  • ECS中已经安装了原生Redis。

    提示:安装了原生Redis的目的是使用其自带的工具redis-cli。

实施步骤

在ECS实例中执行如下命令,查看大Key的情况。

  1. redis-cli -h r-***************.redis.rds.aliyuncs.com -a XXX --bigkeys

注:

  • -h指定Redis的连接地址。
  • -a指定Redis的认证密码。
  • —bigkeys查找大Key。
  • —hotkeys用来查询热点Key。

系统显示类似如下。
使用redis-cli的“--bigkeys”选项查找大Key - 图3

image.png

image.png

image.png

云数据库Redis版对十余组指标进行实时监控,帮助您掌握Redis服务的运行状况。您可以在本文中了解每个监控指标的作用。

监控频率与监控周期

性能监控系统采集监控数据的频率即监控频率。如果系统每5秒采集一次数据,则监控频率为5秒/次,一个监控周期(也称采集周期)为5秒。修改监控频率的方法请参见修改监控频率

说明 监控频率默认为60秒/次。

汇聚监控指标说明

读写分离或集群架构的Redis实例在进入性能监控页面时,默认展示汇聚的监控指标信息。除汇聚监控指标外,您还可以单击数据节点Proxy查看对应节点中各监控组的指标信息,各监控组的指标详细介绍请参见自定义监控组及指标说明

说明 未来将支持更多的监控指标。

监控指标 单位 说明
CpuUsage % 所有数据节点的CPU使用率的平均值。
UsedMemory Bytes 所有数据节点的总内存使用量,包含数据和缓存部分。
Keys Counts 所有数据节点的Key总数。
Expires Counts 所有数据节点中,设置了过期时间的Key总数。
ExpiredKeys Counts 所有数据节点中,已过期淘汰的Key总数。
EvictedKeys Counts 所有数据节点中,已逐出的Key总数。
HitRate % 所有数据节点的Key命中率的平均值,计算方法:命中率 = Key命中数 ÷ (Key命中数 + KeyMiss数)

自定义监控组及指标说明

对于数据节点和Proxy节点(代理节点),您可以在查看各类监控组的相关监控指标信息,操作步骤请参见自定义监控项,下表介绍了各监控组的相关作用。

监控组 说明
基础监控组 实例信息等基本监控信息,包含QPS、带宽及内存使用情况等,详细指标介绍请参见表 1
Keys监控组 使用键值相关命令的监控信息,例如DEL、EXITS等命令的调用次数。
String监控组 使用String数据类型相关命令的监控信息,例如APPEND、MGET等命令的调用次数。
Hashes监控组 使用Hash数据类型相关命令的监控信息,例如HGET、HDEL等命令的调用次数。
Lists监控组 使用Lists数据类型相关命令的监控信息,例如BLPOP、BRPOP等命令的调用次数。
Sets监控组 使用Sets数据类型相关命令的监控信息,例如SADD、SCARD等命令的调用次数。
Zset监控组 使用Zset数据类型相关命令的监控信息,例如ZADD、ZCARD等命令的调用次数。
HyperLog监控组 使用HyperLogLog数据类型相关命令的监控信息,例如PFADD、PFCOUNT等命令的调用次数。
Pub/Sub监控组 使用发布与订阅(Pub/Sub)功能相关命令的监控信息,例如PUBLISH、SUBSCRIBE等命令的调用次数。
Transaction监控组 使用事务(Transaction)相关命令的监控信息,例如WATCH、MULTI、EXEC等命令的调用次数。
Lua脚本监控组 使用Lua脚本相关命令的监控信息,例如EVAL、SCRIPT等命令的调用次数。
TairDoc监控组(仅Redis企业版) 使用TairDoc相关命令的监控信息,例如JSON.SET、JSON.GET等命令的调用次数。
TairHash监控组(仅Redis企业版) 使用TairHash相关命令的监控信息,例如EXHSET、EXHMSET等命令的调用次数。
TairString监控组(仅Redis企业版) 使用TairString相关命令的监控信息,例如EXSET、EXGET等命令的调用次数。
TairGis监控组(仅Redis企业版) 使用TairGis相关命令的监控信息,例如GIS.ADD、GIS.GET、GIS.DEL等命令的调用次数。
TairBloom监控组(仅Redis企业版) 使用TairBloom相关命令的监控信息,例如BF.RESERVE、BF.ADD等命令的调用次数。

对于上述监控组可分为基础监控组和其他监控组,详细指标说明如下:

  • 基础监控组指标说明表 1. 基础监控组指标说明 | 类别 | 监控指标 | 单位 | 说明 | | :—- | :—- | :—- | :—- | | CPU | CpuUsage | % | CPU使用率。 | | 内存 | UsedMemory | Bytes | 内存使用量,包含数据和缓存部分。 | | | MemoryUsage | % | 内存使用率。
    说明 暂不支持2.8版本的Redis实例,如需展示该监控指标,您可以升级实例的引擎版本,详情请参见升级大版本。 | | | Keys | Counts | Key总数量,实例存储的一级总Key个数。 | | | ExpiredKeysPerSecond | Counts/s | 每秒被淘汰的Key数量。 | | | EvictedKeysPerSecond | Counts/s | 每秒被驱逐的Key数量。 | | 磁盘(仅混合存储系列实例支持) | DataSize | MB | 数据文件占用的磁盘空间。 | | | LogSize | MB | 日志文件占用的磁盘空间。 | | 请求 | TotalQps | Counts/s | 每秒总请求数,包含读和写命令。 | | | GetQps | Counts/s | 每秒读命令请求数。
    说明 Redis实例的引擎版本需为4.0及以上,且是最新的小版本。升级方法请参见升级大版本升级小版本。 | | | PutQps | Counts/s | 每秒写命令请求数。
    说明 Redis实例的引擎版本需为4.0及以上,且是最新的小版本。升级方法请参见升级大版本升级小版本。 | | 网络 | UsedConnection | Counts | 已使用连接数,即连接到实例的TCP连接数量。 | | | ConnectionUsage | % | 连接数使用率,即连接数 ÷ 实例支持的总连接数。 | | | IntranetIn | KBps | 实例入流量。 | | | IntranetInRatio | % | 入流量使用率。 | | | IntranetOut | KBps | 实例出流量。 | | | IntranetOutRatio | % | 出流量使用率。 | | 时延 | AvgRt | us | 平均时延,数据节点从接收命令到发出响应的时延平均值。 | | | MaxRt | us | 最大时延,数据节点从接收命令到发出响应的时延最大值。 | | 响应 | hit | Counts | 每秒命中的Key数量。 | | | miss | Counts | 每秒未命中的key数量 | | | HitRate | % | 命中率,计算方法:命中率 = Key命中数 ÷ (Key命中数 + KeyMiss数) |

  • 其它监控组指标说明除基础监控组外,您还可以单击自定义监控项选择其他的监控组,其他的监控组主要反映相关的命令使用次数。您只需根据指标名称辨别其分类即可了解指标的作用。
    例如Keys监控组中的deldumpexists等指标监控的是DEL、DUMP、EXISTS等命令的使用次数。
    使用redis-cli的“--bigkeys”选项查找大Key - 图7

    相关文档

    您还可以使用以下方法查找大Key。

  • 在Python脚本中使用SCAN命令查找大Key

  • Redis内存分析方法

https://help.aliyun.com/knowledge_detail/101699.html