Redis的key过期策略
通过redis的学习,知道使用expire命令可以给key设置一个过期时间,但是在一个redis中可能存在很多很多的key,这些可以中可能有很大一部分都有过期时间,此时redis服务器是如何知道哪些key已经过期要被删除,哪些key还没过期呢?
此时如果是直接遍历redis中所有的key,此时在key非常多的情况下,这种遍历的方式的效率是非常低的,那么redis中中key过期策略是如何实现的呢?
1.惰性删除策略
惰性删除的策略就是假设redis中的某一个key已经到了过期时间,但是redis暂时还没有删除这个key,这个key此时还会存在redis中,紧接着下一次访问redis时恰好又用到了这个key,此时这次访问就会触发redis的删除这个key的操作,并同时返回一个nil
2.定期删除策略
此时redis中除了惰性删除策略,还结合了定期删除策略,就是redis每个一段时间就会抽取一部分的key,对这一部分中的key进行验证,如果有的key已经到了过期时间,则把这个key给删除掉,如果没有过期,则保留该key。
此时抽取key的数量还不能太多,如果抽取的key太多了,由于redis是单线程的,如果抽取的key的数量太多了话,就会让redis阻塞,无法去执行其他的命令
3.内存淘汰策略
惰性删除策略和定期删除策略还是无法保证redis中大部分过期的key会被删除掉,还是有可能有一大部分过期的key没有被删除掉,此时作为惰性删除策略和定期删除策略的补充,redis还提供了内存淘汰策略