如何高效分析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。
阅读全文