redis 的过期删除和淘汰机制
通过定时器在过期的时候立即删除
内存释放及时但是消耗更多的CPU,大并发的时候需要消耗CPU资源影响处理请求的速度
内存友好,CPU不友好
2)惰性删除
放任键过期不管,到下次需要去取出的时候检查是否过期并删除
可能存在大量过期键,且不会使用,导致内存溢出
内存不友好,CPU友好
3)定期删除
每隔一段时间检查,删除过期的键
删除多少和检查多少有算法决定
2、redis采用的 惰性删除 + 定期删除
周期性随机测试一些设置了过期时间的键进行检查,到期则删除
每次清理的时间不超过CPU的25%,达到时间则退出检查
定期没有删除到的键,且以后不会使用的键还是会存在内存中,所以需要配合淘汰策略
3、淘汰策略(内存不足以写入新数据的时候执行)
volatile-lru :设置了过期时间且最近使用越少越优先淘汰
volatile-ttl :设置了过期时间且过期时间越早越优先淘汰
volatile-random :设置了过期时间中随机删除
allkeys-lru :所有键中过期时间越早越优先淘汰
allkeys-random :所有键中过期随机淘汰
no-enviction :不允许淘汰,内存不足报错