Redis 内存占用排查经验及实操

Redis 内存占用排查

在生产环境中,如果发现 Redis 占用内存过高,排查的思路通常分为两条:

  1. Key 少但大 → 关注大 Key。
  2. Key 多 → 关注为什么有这么多 Key,俗话说“小数怕长计”。

查看 Redis 内存基本情况

Redis 自带命令可以查看基础内存信息:

INFO MEMORY

该命令可以返回 Redis 实例的内存使用概况,包括总内存、碎片率、内存分配情况等。


使用 rdb-tools 深入分析

如果想对具体 Key 的内存占用进行分析,可以使用 redis-rdb-tools。虽然工具版本较旧(2020 年),但解析能力仍然够用。

安装 rdbtools

先决条件:

  • python2.7 (没有的话建议用conda安装,环境隔离,避免遇到坑)
  • python-lzf(可选,但强烈建议安装,可以大幅加快解析速度)
  • redis-py(可选,用于测试用例)

安装方式(推荐从 PyPI 安装):

pip install rdbtools python-lzf

注意:不安装 python-lzf 也能解析,但 1G 的 RDB 文件可能需要 10~20 分钟。


导出内存信息到 CSV

rdb -c memory redis-dump.rdb -f memory.csv

导出的 CSV 文件格式示例:

> rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv
> cat memory.csv

database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,list,lizards,241,quicklist,5,19
0,list,user_list,190,quicklist,3,7
2,hash,baloon,138,ziplist,3,11
2,list,armadillo,231,quicklist,5,20
2,hash,aroma,129,ziplist,3,11

分析 Key 的有效期

  • 无过期的 Key:用逗号结尾表示没有设置有效期。
grep ',$' memory.csv > noexp.csv

统计某类 Key 总大小:

grep 'xxxx' noexp.csv | awk -F, 'NR > 1 { total += $4 } END { print "Total Size = " total/1024/1024/1024 " Gbytes" }'
  • 有过期的 Key:反过来不是逗号结尾的就是设置了有效期。
grep -v ',$' memory.csv > hasexp.csv

统计设置了有效期的 Key 占用的内存:

cat hasexp.csv | awk -F, 'NR > 1 { total += $4 } END { print "Total Size = " total/1024/1024/1024 " Gbytes" }'

按内存大小排序分析

可以根据 size_in_bytes 列对 CSV 文件排序,从而找到最占内存的 Key:

(head -n 1 memory.csv && tail -n +2 memory.csv | sort -t, -k4,4nr) > memory_sorted.csv

这样可以快速定位哪些 Key 占用了大量内存,从而优化存储策略。


总结

通过上述方法,你可以:

  • 判断 Redis 内存占用是否异常;
  • 找到大 Key 或数量过多的 Key;
  • 分析 Key 是否合理设置了有效期;
  • 制定优化方案,减少内存占用,提高 Redis 性能。

文末附加内容

评论

  1. 匿名
    1 周前
    2025-9-10 11:41:19

    1111

  2. 匿名
    2 天前
    2025-9-16 11:41:37

    wjtest:冰毒大麻海洛因

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇