跳到主要内容

简述Redis的过期策略以及内存淘汰机制 ?

参考答案:

Redis的过期策略和内存淘汰机制是Redis内存管理的重要组成部分,它们共同保证了Redis在高负载和内存限制条件下的稳定运行。

过期策略

Redis的过期策略主要有两种:定时过期和惰性过期。

  1. 定时过期:每个设置了过期时间的key都需要创建一个定时器,当key到达过期时间时,会立即被清除。这种策略的优点是可以立即清除过期的数据,对内存很友好。然而,它也会占用大量的CPU资源去处理过期的数据,可能会影响缓存的响应时间和吞吐量。
  2. 惰性过期:只有在访问一个key时,才会判断该key是否已过期,如果过期则清除。这种策略可以最大化地节省CPU资源,但它对内存并不友好。在极端情况下,可能会出现大量的过期key没有被再次访问,从而不会被清除,占用了大量的内存。

Redis会周期性地随机测试一些key,已过期的key将会被删除。这是为了平衡定时过期和惰性过期的优缺点,既不会过度消耗CPU资源,也不会让过期key长期占用内存。

内存淘汰机制

当Redis的内存使用达到maxmemory上限时,就会触发内存淘汰机制。Redis提供了多种淘汰策略,包括:

  1. volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
  2. volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
  3. volatile-random:从已设置过期时间的数据集中随机挑选数据淘汰。
  4. allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。
  5. allkeys-random:从数据集中随机挑选数据淘汰。
  6. no-eviction:禁止驱逐数据,当内存不足以容纳新写入数据时,新写入操作会报错。

这些策略可以根据具体的应用场景和需求进行选择。例如,如果希望尽可能保留最近使用的数据,可以选择volatile-lru或allkeys-lru;如果希望优先淘汰即将过期的数据,可以选择volatile-ttl。