redis采用的是按期删除 + 惰性删除策略。 redis
定时删除cpu消耗过大按期删除,redis默认每一个100ms检查,是否有过时的key,有过时key则删除。算法
须要说明的是,redis不是每一个100ms将全部的key检查一次,而是随机抽取进行检查(若是每隔100ms,所有key进行检查,redis岂不是卡死)。内存
所以,若是只采用按期删除策略,会致使不少key到时间没有删除。因而,惰性删除派上用场。也就是说在你获取某个key的时候,redis会检查一下,这个key若是设置了过时时间那么是否过时了?若是过时了此时就会删除。请求
采用按期删除+惰性删除就没其余问题了么?im
不是的,若是按期删除没删除key。而后你也没即时去请求key,也就是说惰性删除也没生效。这样,redis的内存会愈来愈高。那么就应该采用内存淘汰机制最近最少算法(LRU)将最近的放到栈头,将最少的(栈尾)淘汰cpu