设置 redis 最大内存占用率

 设置 redis 最大内存占用率

今天服务器登录异常,进入云服务器后台查询了服务器的运行状态发现是内存爆掉了,进一步查看进程信息发现是 redis 吃掉了 73%的系统内存,罪魁祸首就是它了。

想起来redis搭建以来还没配置过内存占用上限,慢慢的它就把系统的可用内存给吃完了 😯。

Ubuntu Server下redis的配置文件在路径

\etc\redis\redis.conf

在redis.conf配置文件里头找到

maxmemory 

这一项

配置为具体的内存上限值即可,如果只填数字则默认以字节为单位,如 1024 则是 1K字节,当然也可以在数字后带容量单位,如 1mb、1gb 等

maxmemory 4gb

设置了maxmemory 内存上限,还要设置一下redis的内存淘汰策略,如果内存占用触发到了上限值,redis则根据所设置的内存淘汰策略剔除旧记录,从而为新的记录插入腾出可用空间。

redis的内存淘汰策略包括如下这么几个选项,也显示在了\etc\redis\redis.conf文件内

  • noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
  • allkeys-lru:从所有key中使用LRU算法进行淘汰
  • volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
  • allkeys-random:从所有key中随机淘汰数据
  • volatile-random:从设置了过期时间的key中随机淘汰
  • volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰

当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误。

选用的内存淘汰策略通过设置 maxmemory-policy 这一项来进行设置。

继续在\etc\redis\redis.conf内编辑 maxmemory-policy 这一项的值,选定一项内存淘汰策略即可,如:

maxmemory-policy allkeys-lru

至于内存淘汰策略怎么选合适,可以参考下redis的官方文档:

https://redis.io/topics/lru-cache

设置好后保存一下,然后

service redis-server restart

重启一下redis服务。

我们连接一下redis验证一下配置是否起效

redis-cli  //连接本地的redis服务

ping  //ping一下服务,如果返回 PONG,则验证 redis-server 工作正常

config get maxmemory  //获取 maxmemory 最大内存上限

config set maxmemory 100mb  //也可以通过这条命令设置 maxmemory 最大内存上限

config get maxmemory-policy  //获取当前内存淘汰策略

config set maxmemory-policy allkeys-lru  //也可以通过这条命令设置内存淘汰策略

 

 

吴川斌

吴川斌

Leave a Reply