redis的过期删除策略
17、定期删除时,redis是如何扫描内存的
首先当我们给redis中存储的数据设置了过期时间,并且当数据过期了,此时他并不会立刻去讲数据删除
他的删除策略有两种,一种是惰性删除,当下次我们访问这个key的时候,发现他key已经过期了就去删除他
第二种是扫描,扫描哪些key过期了就删除
第一种方案的优先就是不占用redis的cpu去扫描哪些过期了,缺点就是可能会存在大量的过期key,占用redis的内存,导致redis内存飙升甚至告警,当然这个问题我们是可以利用redis数据淘汰策略,比如allkeys-lru来进行一个兜底,保证不会出现内存不足报错的情况
第二种扫描最大的问题是怎么扫,如果我们存在的数据特别多,一次性扫描一堆的数据,会阻塞主线程,效率非常低
所以一般来说采用的是每隔一段时间,就随机咯一些key过来判断他有没有过期,
这样结合上面两种方式我们就能够男足大多数情况了