过期数据的删除策略
- 惰性删除:只会在取出key的时候才对数据进行过期检查。这样对CPU最友好,但是可能会造成太多的过期key没有被删除;
- 定期删除:每隔一段时间随机抽取(而不是遍历所有设置过期时间的key)一批key执行删除过期key的操作。同时redis底层会通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。
由于通过定期删除会漏掉很多过期的key,然后也没有及时查看也就没有走惰性删除;也就是仍有可能漏掉了很多过期的key,会导致大量过期的key堆积在内存中造成out of memory;
redis内存淘汰机制
- volatile-lru:从已经设置过期时间的数据集中挑选最近最少使用的数据淘汰;
- volatile-lfu:从已经设置过期时间的数据集中挑选最不常使用的数据淘汰;
- volatile-ttl:从已经设置过期时间的数据集中挑选将要过期的数据淘汰;
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key;
- allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的key;
- allkeys-random:从数据集中任意选择数据淘汰;
- no-eviction:禁止驱逐数据,也就是当内存不足以容纳新写入数据时,新写入操作会报错。