Redis学习(四):Redis的数据过期策略与LRU实现
删除策略
Redis的数据过期删除策略采用:定时删除和惰性删除两种策略
- 定时删除策略:Redis启用一个定时器监视所有的key,判断key是否过期,过期的话就删除。这种策略可以保证过期的key最终被删除,但是也存在严重的缺点:每次遍历都遍历内存中所有的key,非常消耗CPU资源,并且当key已过期,但是定时任务未唤起,这段时间key还可以使用。
- 惰性删除策略:在获取key时,先判断key是否过期,如果过期了,则将其删除。这种方式存在一个缺点:如果这个key一直未使用,那么该数据会一直存储在内存中,浪费内存空间。
这两种策略天然可以进行互补,结合起来一起使用,定时删除策略发生一些改变,不是每次都扫描全部的key了,而是随机抽取一部分key进行检查,这样就大大降低了CPU资源消耗,惰性删除策略互补了未检查到的key,基本满足了所有要求。
内存淘汰机制
但是如果有一个key,既没有被随机抽取到,又没有被惰性删除,这部分key将如何进行删除呢?
这就使用到了redis的内存淘汰机制,当内存不够用时,内存淘汰机制就会上场:
- 当内存不足以容纳新写入的数据时,新写入的数据会报错。(Redis默认策略)
- 当内存不足以容纳新写入的数据时,在键空间中,移除最少使用的key。(LRU推荐使用)
- 当内存不足以容纳新写入的数据时,在键空间中,随机移除某个key。
- 当内存不足以容纳新写入的数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般把redis既当缓存,又作为持久化存储的时候才用。
- 当内存不足以容纳新写入的数据时,在设置了过期时间的键空间中,随机移除某个key。
- 当内存不足以容纳新写入的数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
LRU具体实现
浙公网安备 33010602011771号