正文

清理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

上面三步的截图

清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略

中间我输入的keys *这个命令是查看redis的数据的,意思是查看redis中的所有key,可以看到现在是没数据了。

此时你发现,执行命令后内存占用并没有减少。

原因redis官方有说明:https://redis.io/topics/memory-optimization

大致意思就是,redis实际已经清理了内存。但是他没有把占用的这部分内存返回给操作系统。而是留着预备下次新的数据直接写入。

我们想清理掉应该怎么办呢?

可以执行以下命令

可以使用MEMORY PURGE命令进行内存整理。瞬间会将内存释放出来。下面截图我运行了两次。一次即可。

清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略

 

设置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占用内存,并限制maxmemory最大占用内存,设置redis置换策略清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略

 

设置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)的提示

清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略清理redis占用内存,并限制maxmemory最大占用内存,设置redis置换策略

 

大功告成!