怎么查Redis里还能用多少内存,弄清楚指定可用内存的方法讲解
- 问答
- 2026-01-05 04:31:04
- 26
要弄清楚Redis里还能用多少内存,以及如何设置和管理这个可用内存,我们需要从几个方面来理解,这个过程其实不复杂,我们可以把它想象成检查一个仓库还剩多少空间,以及如何设定这个仓库的最大容量。
第一部分:怎么查看Redis当前用了多少内存以及还剩多少内存
查看Redis的内存使用情况,最直接和常用的方法是使用Redis自带的命令行工具,你需要连接到你的Redis服务器,然后使用一些特定的命令。
你可以使用 INFO MEMORY 命令(来源:Redis官方文档关于INFO命令的说明),这个命令会返回一大堆关于内存的信息,你不用被这么多信息吓到,我们只需要关注其中几个关键的指标:
used_memory:这是Redis当前已经使用了的内存总量,单位是字节,这是最核心的数字,告诉你仓库已经被占用了多少空间。used_memory_human:这个和上面的used_memory是一样的,但是它会用更人性化的单位(比如K、M、G)来显示,让你一眼就能看明白,比如显示”100.56M”,就表示用了大约100兆字节。maxmemory:这是你为Redis设置的内存上限,如果这个值被设置为0,意味着没有设置内存限制,Redis会尽可能使用服务器的可用内存,这在实际生产环境中是很危险的,可能导致服务器因内存耗尽而崩溃,通常我们都会设置一个maxmemory值。maxmemory_human:同样是maxmemory的人性化显示。
最简单的“还能用多少内存”的计算方法就是:剩余内存 = maxmemory - used_memory,如果maxmemory是0,那么剩余内存就是你的服务器总内存减去used_memory和其他系统进程所用内存后的值。

除了INFO MEMORY,还有一个更简单的命令叫 CONFIG GET maxmemory 和 CONFIG GET used-memory(注意这里是used-memory带横杠),你也可以分别获取这两个值然后自己计算,但通常INFO MEMORY一次性提供所有信息,更为方便。
第二部分:如何指定和配置Redis的可用内存(即设置maxmemory)
指定Redis的最大可用内存,也就是设置maxmemory这个参数,是管理Redis内存的关键一步,这个操作通常在Redis的配置文件中进行。
- 找到配置文件:Redis的配置文件通常命名为
redis.conf,它可能位于不同的目录,取决于你的安装方式(比如在Linux上,可能在/etc/redis/目录下)。 - 修改配置:用文本编辑器打开
redis.conf文件,寻找一个叫做maxmemory的配置项,如果找不到,你可以在文件的适当位置(比如关于内存管理的部分)自己添加一行,这一行的写法是:maxmemory <bytes>这里的
<bytes>就是你想要设置的最大内存字节数,如果你想设置最大内存为1GB,你可以写:
maxmemory 1073741824或者,为了更易读,你也可以使用单位:
maxmemory 1gb其他单位还包括
k(千字节)、m(兆字节)等。 - 重启生效:修改并保存配置文件后,你需要重启Redis服务才能使新的内存限制生效,重启命令根据你的系统管理方式而不同,例如在Ubuntu上使用Systemd的话,可能是
sudo systemctl restart redis-server。
第三部分:设置maxmemory之后,内存满了怎么办?—— 理解内存淘汰策略
仅仅设置maxmemory是不够的,你必须想好,当Redis使用的内存达到这个上限时,接下来该怎么办?是拒绝新的写入请求,还是淘汰掉一些旧的数据来腾出空间?这个行为就是由 内存淘汰策略 决定的(来源:Redis官方文档关于maxmemory-policy的说明)。

你同样需要在redis.conf文件中配置maxmemory-policy这个参数,常见的策略有:
- noeviction:这是默认策略,当内存不足时,新的写入操作会报错,读请求正常进行,这适用于你确信数据绝对不能丢失的场景,但需要你的应用程序能处理好写入错误。
- allkeys-lru:从所有的键中,挑选最近最少使用的键(LRU算法)进行淘汰,直到腾出足够空间,这是一种非常通用的策略,能保证热点数据常驻内存。
- volatile-lru:只从设置了过期时间的键中,挑选最近最少使用的进行淘汰。
- allkeys-random:从所有键中随机淘汰一些键。
- volatile-random:只从设置了过期时间的键中随机淘汰。
- volatile-ttl:从设置了过期时间的键中,挑选剩余寿命最短的键优先淘汰。
选择合适的策略非常重要,如果你的数据都有过期时间,且重要性不同,volatile-lru或volatile-ttl可能很合适,如果你希望所有数据都可能被淘汰以保障新写入的成功,那就用allkeys-lru。
第四部分:一个简单的操作示例
假设我们想检查一个Redis实例,并设置其最大内存为512MB,策略为allkeys-lru。
- 连接Redis:
redis-cli - 查看当前状态:在命令行里输入
INFO MEMORY,查看当前的used_memory_human和maxmemory_human。 - 计算剩余内存:如果
maxmemory已经设置(比如是500MB),就用500MB减去used_memory得到剩余内存,如果maxmemory是0,则需要关注服务器整体内存。 - 设置新配置:退出命令行,编辑
redis.conf文件。- 找到或添加行:
maxmemory 536870912(512MB的字节数)或maxmemory 512mb。 - 找到或添加行:
maxmemory-policy allkeys-lru。
- 找到或添加行:
- 重启服务:
sudo systemctl restart redis-server。 - 验证配置:重新连接Redis,使用
CONFIG GET maxmemory和CONFIG GET maxmemory-policy来确认新配置已经生效。
通过以上步骤,你就能清楚地知道Redis还能用多少内存,并且能够根据你的需求合理地指定和管理这个可用内存的上限和行为方式了,定期监控used_memory的增长率,能帮助你提前规划是否需要扩容或优化数据。
本文由芮以莲于2026-01-05发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/74738.html
