Redis学习(四):Redis的数据过期策略与LRU实现

删除策略

Redis的数据过期删除策略采用:定时删除和惰性删除两种策略

  • 定时删除策略:Redis启用一个定时器监视所有的key,判断key是否过期,过期的话就删除。这种策略可以保证过期的key最终被删除,但是也存在严重的缺点:每次遍历都遍历内存中所有的key,非常消耗CPU资源,并且当key已过期,但是定时任务未唤起,这段时间key还可以使用。
  • 惰性删除策略:在获取key时,先判断key是否过期,如果过期了,则将其删除。这种方式存在一个缺点:如果这个key一直未使用,那么该数据会一直存储在内存中,浪费内存空间。

这两种策略天然可以进行互补,结合起来一起使用,定时删除策略发生一些改变,不是每次都扫描全部的key了,而是随机抽取一部分key进行检查,这样就大大降低了CPU资源消耗,惰性删除策略互补了未检查到的key,基本满足了所有要求。

内存淘汰机制

但是如果有一个key,既没有被随机抽取到,又没有被惰性删除,这部分key将如何进行删除呢?

这就使用到了redis的内存淘汰机制,当内存不够用时,内存淘汰机制就会上场:

  1. 当内存不足以容纳新写入的数据时,新写入的数据会报错。(Redis默认策略)
  2. 当内存不足以容纳新写入的数据时,在键空间中,移除最少使用的key。(LRU推荐使用)
  3. 当内存不足以容纳新写入的数据时,在键空间中,随机移除某个key。
  4. 当内存不足以容纳新写入的数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般把redis既当缓存,又作为持久化存储的时候才用。  
  5. 当内存不足以容纳新写入的数据时,在设置了过期时间的键空间中,随机移除某个key。
  6. 当内存不足以容纳新写入的数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

LRU具体实现

 

posted on 2021-08-29 23:14  yssd  阅读(211)  评论(0)    收藏  举报

导航