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

Redis缓存容量怎么查?实操教你快速搞定缓存大小查询

想知道你的Redis服务器用了多少内存,还剩多少空间,就像检查手机还剩多少存储一样,是日常运维中非常基础又重要的事情,下面就用最直接的方法,一步步教你怎么查。

第一部分:最直接的方法——使用Redis内置命令

查Redis的容量,最权威的信息来源就是Redis服务器本身,你需要连接到你的Redis服务器,不管你是用命令行工具 redis-cli,还是用一些图形化的管理工具(比如RedisInsight),核心都是执行下面几个命令。

核心命令:INFO Memory 这是最全面、最详细的方法,当你连接到Redis后,输入命令 INFO Memory,它会像瀑布一样列出一大堆关于内存使用的信息,别被这么多信息吓到,我们只需要关注其中几个关键指标就行,根据Redis官方文档对INFO命令的解释,关键指标如下:

  • used_memory 这是最重要的数字,它表示Redis实际已经分配并使用了的字节数,简单说,就是你所有缓存数据(键值对)占用的总内存大小,这个数字通常以字节为单位,看起来会很长,你可以心算一下,大概1MB约等于100万字节。
  • used_memory_human 这是上面 used_memory 的“人类友好”版本,Redis会很贴心地帮你转换成KB、MB、GB这样的单位,45G,一眼就能看懂,不用自己计算。
  • used_memory_peak 这个表示Redis自启动以来,内存使用的峰值,这个值很有用,可以帮助你了解你的业务最高峰时大概需要多大的内存,为扩容提供参考。
  • maxmemory 这是你为Redis配置的最大内存上限,如果这个值配置为0,表示没有限制,Redis会一直使用直到撑满服务器物理内存(这可能很危险),通常我们都会设置一个上限。
  • maxmemory_policy 当内存使用达到 maxmemory 上限时,Redis采取的淘汰策略,比如是淘汰最近最少使用的数据(LRU),还是随机淘汰等,这个策略决定了缓存满了之后的行为。

实操步骤:

  1. 打开终端或命令行。
  2. 输入 redis-cli 连接到你的Redis服务器(如果Redis在远程,可能需要加 -h 主机名和 -p 端口参数)。
  3. 输入 INFO Memory
  4. 在输出结果里,迅速找到上面提到的这几个关键行。

举例: 你可能会看到类似这样的输出(只截取关键部分):

# Memory
used_memory: 1024567890
used_memory_human: 977.21M
used_memory_peak: 1203456789
used_memory_peak_human: 1.12G
maxmemory: 2147483648
maxmemory_human: 2.00G
maxmemory_policy: allkeys-lru

解读一下: 这个Redis实例当前用了大约977MB内存,历史上最高用过1.12GB,而我们给它设置的上限是2GB,所以目前还有大约1GB的剩余空间,暂时没有压力,淘汰策略设置的是 allkeys-lru

辅助命令:查看单个Key的大小 有时候你不仅想知道总容量,还想揪出是哪些“大块头”Key占用了最多空间,这时候可以用 redis-cli 自带的一个强大工具。

命令:redis-cli --bigkeys 这个命令会扫描整个Redis数据库,并统计出各种数据类型中最大的Key,并给出它们的大小。

实操步骤:

  1. 直接在系统命令行(不是在redis-cli交互界面里)执行: redis-cli -h your_redis_host -p your_redis_port --bigkeys
  2. 等待它扫描完成,它会输出一个报告,类似:
    Biggest string found 'user:session:very_long_id' has 1523123 bytes
    Biggest hash   found 'product:info:12345' has 100000 fields

    这样你就能快速定位到可能是哪些Key导致了内存占用过高。

第二部分:通过监控工具来查看(更直观)

如果你觉得敲命令不够直观,或者想看到内存使用的历史趋势和实时变化,那么使用图形化监控工具是更好的选择。

Redis自带的命令行监控:MONITORredis-cli 中输入 MONITOR 命令,它会实时打印出Redis服务器接收到的每一个命令,这个命令主要用于调试,因为它会输出大量信息,对性能有影响,不要在生产环境长期开启,但它能让你真切地“看到”缓存的访问情况。

第三方图形化工具(如RedisInsight) Redis官方推出了一个免费的视觉化管理工具叫RedisInsight,非常推荐,根据RedisInsight官方介绍,它的主要优势是:

  • 可视化内存仪表盘: 直接以图表形式展示 used_memoryused_memory_peak 等关键指标,变化趋势一目了然。
  • 慢查询分析: 帮你找到执行慢的命令。
  • 浏览器Key: 可以方便地查看、修改、删除Key,并直接看到Key的大小。
  • 内存分析: 有更高级的功能可以深入分析内存的使用模式。

你只需要去Redis官网下载RedisInsight,安装后连接到你的Redis服务器,就能在一个漂亮的界面里完成所有监控和排查工作,比纯命令行要轻松很多。

第三部分:查到了容量之后怎么办?

知道了内存用量,目的是为了更好的管理,如果发现内存快满了(used_memory 接近 maxmemory),你可以考虑:

  1. 清理过期或无用数据: 检查是否有可以删除的旧数据。
  2. 调整淘汰策略: 根据你的业务场景,选择一个合适的 maxmemory_policy,比如如果是缓存场景,用 allkeys-lruvolatile-lru 通常比较合适。
  3. 优化数据结构: 使用 --bigkeys 找到的大Key,看看是否能用更节省内存的数据结构来存储,不要用巨大的String,也许可以拆成多个Hash。
  4. 考虑扩容: 如果业务确实在增长,最直接的办法就是增加 maxmemory 配置(如果是在云服务上,就升级到更大的规格)。

查Redis缓存容量,最核心的就是登录到服务器,执行 INFO Memory 命令,重点关注 used_memory_humanmaxmemory_human 这两个值,想找具体是哪个Key太大,就用 redis-cli --bigkeys,想要更省事、看趋势,就使用 RedisInsight 这类图形化工具,方法都很直接,动手试一下就能快速搞定。

Redis缓存容量怎么查?实操教你快速搞定缓存大小查询