Redis内存淘汰策略
悲观者从机会中看到困难。乐观者从困难中看到机会。
——温斯顿·丘吉尔
Redis内存淘汰策略共有八种,这八种策略大体分为「不进行数据淘汰」和「进行数据淘汰」两类策略。
1、不进行数据淘汰的策略
noeviction (Redis3.0之后,默认的内存淘汰策略):它表示当运行内存超过最大设置内存时,不淘汰任何数据,这时如果有新的数据写入,会报错通知禁止写入,不淘汰任何数据,但是如果没用数据写入的话,只是单纯的查询或者删除操作的话,还是可以正常工作。
2、进行数据淘汰的策略
针对「进行数据淘汰」这一类策略,又可以细分为「在设置了过期时间的数据中进行淘汰」和「在所有数据范围内进行淘汰」这两类策略,
在设置了过期时间的数据中进行淘汰:
- volatile-random:随机淘汰设置了过期时间的任意键值:
- volatile-ttl:优先淘汰更早过期的键值。
- volatile-lru (Redis3.0 之前,默认的内存淘汰策略):淘汰所有设置了过期时间的键值中,最久未使用的键值;
- volatile-lfu (Redis 4.0后新增的内存淘汰策略):淘汰所有设置了过期时间的键值中,最少使用的键值;
在所有数据范围内进行淘汰
- allkeys-random:随机淘汰任意键值:
- allkeys-lru:淘汰整个键值中最久未使用的键值;
- allkeys-lfu (Redis 4.0 后新增的内存淘汰策略): 淘汰整个键值中最少使用的键值。
如何查看当前Redis使用的内存淘汰策略
可以使用 config get maxmemory-policy 命令,来查看当前 Redis 的内存淘汰策略,命
令如下:
127.0.0.1:6379> config get maxmemory-policy
1)"'maxmemory-policy""
2)"noeviction"
可以看出,当前 Redis 使用的是 noeviction 类型的内存淘汰策略,它是 Redis 3.0 之后默认使用的内存淘汰策略,表示当运行内存超过最大设置内存时,不淘汰任何数据,但新增操作会报错。
如何修改Redis内存淘汰策略
设置内存淘汰策略有两种方法:
- 方式一:通过
”config set maxmemory-policy <策略>"命令设置。它的优点是设置之后立即生效不需要重启 Redis 服务,缺点是重启 Redis 之后,设置就会失效。 - 方式二:通过修改 Redis 配置文件修改,设置
”maxmemory-policy <策略>",它的优点是重启 Redis服务后配置不会丢失,缺点是必须重启 Redis 服务,设置才能生效。

浙公网安备 33010602011771号