Redis缓存过期淘汰机制
在我们对于存储的数据设置过期时间后,Redis
会帮我们淘汰掉这些数据。
由于数据量可能比较大,我们如果需要扫描整个Redis
存储的数据,会比较耗费时间。
所以,Redis
采用的策略是:
-
定期删除
在设置了过期时间的数据集中,隔一段时间挑几个检测,看是不是过期了,过期就删了。
-
惰性删除
在get获取值的时候,会检测你要get的数据是否过期,过期就删了,给你返回null
如果有很多数据没有被定期删除扫描到。而且我们也没有去get触发惰性删除,那么
Redis根据这种情况,提供了缓存淘汰机制。
其实类似操作系统一样,这种问题操作系统很早就考虑过了,内存是硬盘的缓存,CPU的寄存器也是缓存,虚拟内存中的页缓存等等
Redis的缓存淘汰有这几种:
- 基于已经设置过期时间的数据集
- LRU,最近最少使用的删掉
- TTL,快过期的删掉
- Random,随机删
- 普通的数据集
- LRU,最近最少使用的key,把其K,V删掉。
- Random,随机删
- No-eviction,容量满了就不能提交了
- Redis4.0新增的
- 已经设置过期时间的数据集中,把 访问次数最少的删掉
- 普通的数据集中,把 访问次数最少的删掉