Redis08——缓存回收

60 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

缓存回收

缓存回收、删除过期key

redis是怎么删除过期key的?缓存是如何回收的?

1,定期删除:定期在后台随机检查一批key,删除已经过期的key,若过期比例超过25% 也会检查。

缺点:可能有很多过期key没有被检查到

2,惰性删除访问一个key时,若key过期则删除。

缺点内存释放不及时,无法释放未被请求的过期key。

两种方式配合,可以尽量把无用空间回收。

也存在问题,如果定期删除没处理过期key也没有请求过期key,redis的内存会越来越高,达到限制时,会执行内存淘汰策略

缓存淘汰策略

Redis共提供了8中缓存淘汰策略,其中 volatile-lfu 和 allkeys-lfu 是Redis 4.0版本新增的。

img

1、noeviction不淘汰数据。一旦缓存被写满,再有写请求时不再提供服务直接返回错误。redis作为缓存时不常用。

volatile在设置了过期key的键值对中

2、volatile-ttl:在设置了过期时间的键值对中,移除即将过期的键值对。

3、volatile-random:在设置了过期时间的键值对中,随机移除某个键值对。

4、volatile-lru:在设置了过期时间的键值对中,移除最近最少使用的键值对。

5、volatile-lfu:在设置了过期时间的键值对中,移除最近使用频率最少的键值对(4.0 版本后新增)

allkeys在所有键值对中

6、allkeys-random:在所有键值对中,随机移除某个key。

7、allkeys-lru:在所有的键值对中,移除最近最少使用的键值对。

8、allkeys-lfu:在所有的键值对中,移除最近使用频率最少的键值对(4.0 版本后新增)

通常推荐使用 allkeys-lru 策略。这样可以把最近最常访问的数据留在缓存中,提升应用的访问性能。

如果数据有明显的冷热数据区分建议使用 allkeys-lru 策略

如果数据没有明显的冷热数据区分,建议使用 allkeys-random 策略,随机选择淘汰的数据就行。