设置 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 //也可以通过这条命令设置内存淘汰策略