当 Redis(运行)内存被使用完时,也就是当 Redis 的运行内存,已经超过 Redis 设置的最大内存之后,Redis 将采用内存淘汰机制来删除符合条件的键值对,以此来保障 Redis 的正常运行

内存淘汰策略

早期版本的 Redis 有以下 6 种淘汰机制(也叫做内存淘汰策略):

  1. noeviction:不淘汰任何数据,当内存不足时,新增操作会报错,Redis 默认内存淘汰策略;
  2. allkeys-lru:淘汰整个键值中最久未使用的键值;
  3. allkeys-random:随机淘汰任意键值;
  4. volatile-lru:淘汰所有设置了过期时间的键值中最久未使用的键值;
  5. volatile-random:随机淘汰设置了过期时间的任意键值;
  6. volatile-ttl:优先淘汰更早过期的键值。

在 Redis 4.0 版本中又新增了 2 种淘汰机制:

  1. volatile-lfu:淘汰所有设置了过期时间的键值中,最少使用的键值;
  2. allkeys-lfu:淘汰整个键值中最少使用的键值。

其中 allkeys-xxx 表示从所有的键值中淘汰数据,而 volatile-xxx 表示从设置了过期键的键值中淘汰数据。 所以,现在 Redis 的版本中有 8 种内存淘汰策略。

查看内存淘汰策略

image.png

设置内存淘汰策略

Redis 内存淘汰策略有两种设置方式:

  1. 修改 redis 配置文件设置内存淘汰策略;
  2. 连接 redis 服务器,通过命令设置内存淘汰策略。

具体设置执行如下。

设置配置文件

通过 redis 的配置文件 redis.conf 来设置内存淘汰策略:

maxmemory-policy allkeys-lru

通过命令设置

先连接到 redis 服务器,然后通过命令修改淘汰策略:

127.0.0.1:6379> config set maxmemory-policy allkeys-lru

注意事项:通过命令设置内存淘汰策略,在 redis 重启之后会失效,所以最好是在配置文件中设置内存淘汰策略。

特殊说明

以上内容来自我的《Java 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:

加我微信咨询:vipStone【备注:训练营】