清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略
宝塔linux面板:清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略
本教程环境:
宝塔linux面板,redis5.0
操作系统:CentOS 7.3 x64
宝塔面板默认redis安装目录:/www/server/redis
清理redis占用的内存空间
1.进入Redis目录
cd /www/server/redis
2.运行redis客户端
redis-cli
3.清理redis数据
flushall #清空整个Redis服务器数据(删除所有数据库所有key) flushdb #清空当前数据库中的所有key
上面三步的截图
中间我输入的keys *这个命令是查看redis的数据的,意思是查看redis中的所有key,可以看到现在是没数据了。
此时你发现,执行命令后内存占用并没有减少。
原因redis官方有说明:https://redis.io/topics/memory-optimization
大致意思就是,redis实际已经清理了内存。但是他没有把占用的这部分内存返回给操作系统。而是留着预备下次新的数据直接写入。
我们想清理掉应该怎么办呢?
可以执行以下命令
可以使用MEMORY PURGE命令进行内存整理。瞬间会将内存释放出来。下面截图我运行了两次。一次即可。
设置redis最大占用内存值
这里以设置最大占用100MB为例。
1.先查看下现在的占用设置
CONFIG GET maxmemory
一般返回
1) “maxmemory"
2) “0"
这个0在x64系统下是不限制的意思。
2.设置redis最大可使用100MB内存
CONFIG SET maxmemory 100MB
会返回个ok。
3.再查看内存占用设置
CONFIG GET maxmemory
返回
1) “maxmemory"
2) “104857600"
以上三步截图:
设置redis数据置换策略
上面我们设置了redis的最大占用内存,如果说内存占用达到了我们的设置值怎么办?
我们需要对redis设置一下置换策略。
redis置换策略可以对不经常使用的key数据进行替换删除
一般有以下几种置换策略
noeviction: 不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据 volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据 allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据 volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据 volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据
具体选择那种徐要根据自己实际业务来选择。
本教程用的allkeys-lru策略
还是跟上面的一样的设置方式,进入redis-cli然后输入下面的命令即可。
CONFIG GET allkeys-lru
因为redis中我刚刚删除了所有数据,所以会得到(empty list or set)的提示
大功告成!