简述Redis的过期策略以及内存淘汰机制 ?
参考答案:
Redis的过期策略和内存淘汰机制是Redis内存管理的重要组成部分,它们共同保证了Redis在高负载和内存限制条件下的稳定运行。
过期策略
Redis的过期策略主要有两种:定时过期和惰性过期。
- 定时过期:每个设置了过期时间的key都需要创建一个定时器,当key到达过期时间时,会立即被清除。这种策略的优点是可以立即清除过期的数据,对内存很友好。然而,它也会占用大量的CPU资源去处理过期的数据,可能会影响缓存的响应时间和吞吐量。
- 惰性过期:只有在访问一个key时,才会判断该key是否已过期,如果过期则清除。这种策略可以最大化地节省CPU资源,但它对内存并不友好。在极端情况下,可能会出现大量的过期key没有被再次访问,从而不会被清除,占用了大量的内存。
Redis会周期性地随机测试一些key,已过期的key将会被删除。这是为了平衡定时过期和惰性过期的优缺点,既不会过度消耗CPU资源,也不会让过期key长期占用内存。
内存淘汰机制
当Redis的内存使用达到maxmemory上限时,就会触发内存淘汰机制。Redis提供了多种淘汰策略,包括:
- volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
- volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
- volatile-random:从已设置过期时间的数据集中随机挑选数据淘汰。
- allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。
- allkeys-random:从数据集中随机挑选数据淘汰。
- no-eviction:禁止驱逐数据,当内存不足以容纳新写入数据时,新写入操作会报错。
这些策略可以根据具体的应用场景和需求进行选择。例如,如果希望尽可能保留最近使用的数据,可以选择volatile-lru或allkeys-lru;如果希望优先淘汰即将过期的数据,可以选择volatile-ttl。