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 库)

操作步骤

  1. 生成 RDB 文件

    redis-cli save          # 阻塞生成 RDB(生产环境慎用)
    # 或
    redis-cli bgsave        # 后台生成 RDB(推荐)
    

    RDB 文件默认保存在 dump.rdb(路径由 dir 配置项指定)。

  2. 使用 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:指定数据类型(可选)。
  3. 查看报告

    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 内存占用。

操作步骤

  1. 下载并安装 RedisInsight
  2. 连接到 Redis 实例。
  3. 进入 Browser 标签,使用 Filter 功能按内存排序 Key。

总结

方法 适用场景 优点 缺点
--bigkeys 快速找出各类型最大 Key 简单快捷 无法列出所有大 Key
SCAN + MEMORY 自定义阈值筛选 灵活可控 速度较慢
RDB 分析工具 精确分析离线数据 结果准确,不阻塞 Redis 需生成 RDB 文件
RedisInsight 可视化操作 直观易用 需安装工具,适合小规模数据

注意事项

  1. 生产环境慎用阻塞命令(如 KEYS *SAVE)。
  2. 大 Key 处理建议
    • 拆分:将大 Hash/List 拆分为多个小 Key。
    • 压缩:对 String 类型使用压缩算法(如 GZIP)。
    • 过期时间:对临时数据设置 TTL。
    • 删除:使用 UNLINK 替代 DEL(非阻塞删除)。

results matching ""

    No results matching ""