redis面试(五)删除策略和淘汰策略

删除策略和淘汰策略的区别

两个是不同的过程,被淘汰的key,才能被删除掉。

  • 删除策略有惰性删除和定时删除
  • 淘汰策略则有8种可以配置的模式

删除策略

这两种策略是同时存在的,主要处理的是已经过期的数据。

惰性删除

当我们给数据设置过期时间的话,在数据过期后,某个属性会被后台线程标记为“1”,但是这个数据不会被立即删除。
等到我们下次来查询这个数据的时候,会判断一下,数据的这个属性是否为1,是否已经过期,如果过期的话,会把这条数据删除掉,并且返回一个空。

定期删除

后台线程,定期的轮询,随机抽查一批key,看是否过期,如果过期了,就删除掉过期的key。(这里有的说是20个,有的说是一批,等我翻一翻官方文档再补充)
如果这批key中,过期的数据占比超过25%的话,就再查询一次。
知道抽查数据中过期数据占比低于25%的话,就不在执行。

淘汰策略

淘汰策略主要是针对那些没有过期时间的数据,当redis中数据量过大,内存不足的时候,会触发淘汰策略。
maxmemory控制redis使用的最大内存量,一定要设置,内存满了以后,就有策略来,
maxmemory-policy:
● noeviction(不清理,阻塞所有指令,不再执行)
● volatile-lru(lru清理超时key,一直到空间足够,如果还是不行就退回到noeviction)
● allkeys-lru(对所有key执行lru清理,不管超时没超时)
● allkeys-random(随机清理任何key)
● volatile-random(随机删除过期key)
● volatile-ttl(清理最近马上要过期的key)

LRU算法

LRU 算法全称 Least Recent