Redis查看bigkey
在 Redis 中查找大 Key(占用内存较大的 Key)是优化性能和排查内存问题的重要步骤。以下是几种常用方法:
方法 1:使用 redis-cli
的 --bigkeys
参数
原理:Redis 官方提供的扫描工具,通过遍历所有 Key 并统计大小,快速找出不同类型中的最大 Key(如最大的 String、Hash、List 等)。
操作步骤:
# 连接 Redis 实例执行扫描
redis-cli --bigkeys
# 示例输出(显示每种数据类型中的最大 Key)
-------- summary -------
Sampled 1000000 keys in the keyspace!
Total key length in bytes is 12345678 (avg len 12.34)
Biggest string found 'big_string_key' has 1234567 bytes
Biggest list found 'big_list_key' has 500000 items
Biggest set found 'big_set_key' has 300000 members
Biggest hash found 'big_hash_key' has 200000 fields
Biggest zset found 'big_zset_key' has 100000 members
特点:
- 优点:简单快捷,无需额外工具。
- 缺点:只能找到每个数据类型的最大 Key,无法列出所有大 Key。
方法 2:使用 SCAN
+ MEMORY USAGE
命令
原理:通过 SCAN
遍历所有 Key,结合 MEMORY USAGE
命令逐个计算内存占用。
操作步骤:
# 1. 使用 SCAN 遍历所有 Key(避免阻塞,替代 KEYS *)
redis-cli --scan --pattern '*' | while read key; do
# 2. 获取每个 Key 的内存大小(单位:字节)
size=$(redis-cli memory usage "$key")
# 3. 输出 Key 名称和大小(过滤阈值,如大于 10KB)
if [ "$size" -gt 10240 ]; then
echo "$key: $size bytes"
fi
done
特点:
- 优点:灵活,可自定义阈值和过滤条件。
- 缺点:速度较慢,需遍历所有 Key(适用于少量 Key 的场景)。
方法 3:使用 DEBUG OBJECT
命令(不推荐)
原理:通过 DEBUG OBJECT
命令获取 Key 的序列化长度,但此命令不准确且不推荐生产环境使用(可能阻塞 Redis)。
操作示例:
# 查看 Key 的序列化长度(非实际内存占用)
redis-cli DEBUG OBJECT "your_key"
# 输出示例:Value at:0x7f8b9c8c6d60 refcount:1 encoding:raw serializedlength:1234567
注意:
serializedlength
是 Key 序列化后的长度(RDB 格式),不是实际内存占用。- 该命令可能导致 Redis 阻塞,生产环境慎用!
方法 4:使用第三方工具分析 RDB 文件
原理:通过分析 Redis 的 RDB 快照文件,精确统计每个 Key 的内存占用。
工具推荐:redis-rdb-tools
(Python 库)
操作步骤:
生成 RDB 文件:
redis-cli save # 阻塞生成 RDB(生产环境慎用) # 或 redis-cli bgsave # 后台生成 RDB(推荐)
RDB 文件默认保存在
dump.rdb
(路径由dir
配置项指定)。使用
redis-rdb-tools
分析:# 安装工具 pip install rdbtools # 生成内存报告(按 Key 大小排序) rdb -c memory dump.rdb --bytes 10240 --type string --type hash --type list --type set --type zset | sort -k4nr > memory_report.csv
--bytes 10240
:过滤大于 10KB 的 Key。--type
:指定数据类型(可选)。
查看报告:
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element 0,string,big_string_key,1234567,string,1234567,1234567 0,hash,big_hash_key,987654,hashtable,200000,100
特点:
- 优点:精确可靠,不阻塞 Redis。
- 缺点:需要生成和下载 RDB 文件,步骤较复杂。
方法 5:使用 RedisInsight
可视化工具
原理:Redis 官方推出的图形化管理工具,支持直接查看 Key 内存占用。
操作步骤:
- 下载并安装 RedisInsight。
- 连接到 Redis 实例。
- 进入 Browser 标签,使用 Filter 功能按内存排序 Key。
总结
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
--bigkeys |
快速找出各类型最大 Key | 简单快捷 | 无法列出所有大 Key |
SCAN + MEMORY |
自定义阈值筛选 | 灵活可控 | 速度较慢 |
RDB 分析工具 | 精确分析离线数据 | 结果准确,不阻塞 Redis | 需生成 RDB 文件 |
RedisInsight | 可视化操作 | 直观易用 | 需安装工具,适合小规模数据 |
注意事项
- 生产环境慎用阻塞命令(如
KEYS *
、SAVE
)。 - 大 Key 处理建议:
- 拆分:将大 Hash/List 拆分为多个小 Key。
- 压缩:对 String 类型使用压缩算法(如 GZIP)。
- 过期时间:对临时数据设置 TTL。
- 删除:使用
UNLINK
替代DEL
(非阻塞删除)。