当前位置:首页 > 问答 > 正文

Redis怎么查内存用多少,感觉挺重要的,尤其是想知道占了多少空间的时候

当你感觉Redis占用了太多内存,或者服务器开始变慢,甚至出现错误时,查看Redis的内存使用情况就变得非常重要,这就像你手机存储空间快满了,你需要知道是哪些App或照片占用了大部分空间,才能有针对性地清理,Redis也是同样的道理。

最基础也是最直接的命令:INFO MEMORY

这是最常用、最全面的方法,你只需要连接到你的Redis服务器,然后输入命令 INFO MEMORY,Redis就会返回一大堆关于内存使用的信息,虽然看起来很多,但你只需要关注其中几个关键指标就够了。(来源:Redis官方文档)

  • used_memory:这是最重要的数字,它表示Redis实际分配正在使用的总内存量,单位是字节,这个数字直接回答了“Redis现在占了多少内存”这个问题,不过字节数太大不好理解,你可以用计算器除以1024得到KB,再除以1024得到MB。
  • used_memory_human:这个字段非常贴心,它把上面的 used_memory 自动转换成了一个人类容易阅读的格式,“1.23G”、“256.43M”,你通常最先看这个就行了。
  • used_memory_rss:这个指标是从操作系统角度看的,意思是“常驻集大小”,可以简单理解为,操作系统分配给Redis进程的物理内存大小,正常情况下,它应该比 used_memory 大一些,因为Redis进程自己也需要一些内存来运行,如果这个值比 used_memory 大很多,可能意味着内存碎片比较多。
  • used_memory_peak:这个是Redis运行以来,used_memory 达到的峰值,可以用来判断历史最高内存消耗,帮助你评估需要准备多大的内存。
  • mem_fragmentation_ratio:这是内存碎片率,计算公式是 used_memory_rss / used_memory,这个比值很重要:
    • 如果比值在1左右(比如0.9~1.1),说明内存碎片很少,状态健康。
    • 如果比值大于1.5,说明内存碎片比较多了,可能会影响性能,需要考虑清理或重启。
    • 如果比值小于1,这很少见,通常意味着操作系统正在把Redis的部分内存交换到硬盘上(SWAP),这时性能会急剧下降,是非常危险的信号。

你连上Redis,打一个 INFO MEMORY,然后找到 used_memory_human 这一行,就能立刻知道当前用了多少空间了。

Redis怎么查内存用多少,感觉挺重要的,尤其是想知道占了多少空间的时候

如果想看具体哪个键占了大头:BIGKEYS

你知道总内存用了很多,但想知道是哪些“大块头”的键(Key)导致的,这时候可以用 BIGKEYS 这个命令。(来源:Redis官方文档)

在Redis命令行里输入 redis-cli --bigkeys(注意,这是在系统shell中执行,不是在Redis内部命令),这个命令会扫描整个数据库,然后统计出各种数据类型(String, Hash, List, Set等)中最大的那个键。

它的输出会类似这样:

Redis怎么查内存用多少,感觉挺重要的,尤其是想知道占了多少空间的时候

$ redis-cli --bigkeys
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec per
# 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far 'user:1000:profile' with 1024 bytes
[12.34%] Biggest hash found so far 'product:998:details' with 5 fields
...
-------- summary -------
Sampled 10000 keys in the keyspace!
Total key length in bytes is 123456 (avg len 12.35)
Biggest string found 'user:1000:profile' has 1024 bytes
Biggest hash found 'product:998:details' has 5 fields
...

这个命令能帮你快速定位到可能是“罪魁祸首”的大键,但要注意,这个命令在生产环境使用可能会对性能有轻微影响,因为它需要扫描所有键,最好在业务低峰期执行。

更详细的分析工具:redis-rdb-tools

如果你的Redis内存占用非常大,而且你想得到一个非常详细的分析报告,知道每一个键、每一种数据类型到底占了多大比例,INFOBIGKEYS 就不够用了,这时候,一个非常强大的第三方工具就派上用场了,它叫 redis-rdb-tools。(来源:GitHub上的开源项目)

这个工具的工作原理是:它不直接连接线上的Redis服务器,而是让你把Redis的内存快照文件(RDB文件)导出来,然后在你的本地机器上对这个文件进行分析,这样做对线上服务完全没有影响。

Redis怎么查内存用多少,感觉挺重要的,尤其是想知道占了多少空间的时候

使用步骤大致是:

  1. 在你的服务器上,找到Redis的RDB文件(通常是 dump.rdb),并把它下载到你的本地电脑。
  2. 安装 redis-rdb-tools(通常通过pip安装:pip install rdbtools)。
  3. 使用它提供的命令生成内存报告,你可以生成一个CSV文件,列出所有键及其大小:
    rdb -c memory dump.rdb --bytes 1024 > memory_report.csv

    这个命令会导出所有大于1KB的键的信息到CSV文件里。

  4. 你用Excel打开这个CSV文件,就可以按照内存大小排序,清清楚楚地看到到底是哪些键占了最多的空间,甚至可以分析出是不是有某些业务产生了大量本该过期却被遗忘的键。

这个方法虽然步骤多一点,但它是进行深度内存问题排查的“终极武器”。

  • 快速看一眼:用 INFO MEMORY,重点看 used_memory_human
  • 找大键:在低峰期用 redis-cli --bigkeys
  • 深度分析:使用 redis-rdb-tools 分析RDB文件,得到最全面的报告。

定期检查Redis的内存使用情况是一个很好的习惯,能帮助你提前发现潜在问题,比如内存泄漏(某些键的增长永无止境)、无效数据堆积等,从而保证Redis的稳定和高效运行。