如何高效分析Redis大Key,实现TOP N、批量与从节点优先?
摘要:背景 Redis 大 key 分析工具主要分为两类: 1. 离线分析 基于 RDB 文件进行解析,常用工具是 redis-rdb-tools(https:github.comsripathikrishnanredis-rdb-too
背景
Redis 大 key 分析工具主要分为两类:
1. 离线分析
基于 RDB 文件进行解析,常用工具是 redis-rdb-tools(https://github.com/sripathikrishnan/redis-rdb-tools)。
不过这个工具已近 5 年未更新,不支持 Redis 7,而且由于使用 Python 开发,解析速度较慢。
目前较为活跃的替代工具是 https://github.com/HDT3213/rdb ,该工具支持 Redis 7,并使用 Go 开发。
2. 在线分析
常用工具是 redis-cli,提供两种分析方式:
--bigkeys:Redis 3.0.0 引入,统计的是 key 中元素的数量。
--memkeys:Redis 6.0.0 引入,通过MEMORY USAGE命令统计 key 的内存占用。
这两种方式的优缺点如下:
离线分析:基于 RDB 文件进行解析,不会对线上实例产生影响,不足的是操作相对复杂,尤其是对于很多 Redis 云服务,由于禁用了 SYNC 命令,无法直接通过redis-cli --rdb <filename>下载 RDB 文件,只能手动从控制台下载。
在线分析:操作简单,只要有实例的访问权限,即可直接进行分析,不足的是分析过程中可能会对线上实例的性能产生一定影响。
本文要介绍的工具(redis-find-big-key)也是一个在线分析工具,其实现思路与redis-cli --memkeys类似,但功能更为强大实用。主要体现在:
支持 TOP N 功能
该工具能够输出内存占用最多的前 N 个 key,而 redis-cli 只能输出每种类型中占用最多的单个 key。
支持批量分析
该工具能够同时分析多个 Redis 节点,特别是对于 Redis Cluster,启用集群模式(-cluster-mode)后,会自动分析每个分片。而 redis-cli 只能针对单个节点进行分析。
自动选择从节点进行分析
为了减少对实例性能的影响,工具会自动选择从节点进行分析。只有在没有从节点时,才会选择主节点进行分析。而 redis-cli 只能分析主节点。
测试时间对比
测试环境:Redis 6.2.17,单实例,used_memory_human 为 9.75G,key 数量 100w,RDB 文件大小 3GB。
