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 服务,设置才能生效。

原文

posted @ 2025-04-08 12:51  Tsukinor  阅读(82)  评论(0)    收藏  举报