redis採用的是按期刪除 + 惰性刪除策略。 redis
定時刪除cpu消耗過大按期刪除,redis默認每一個100ms檢查,是否有過時的key,有過時key則刪除。算法
須要說明的是,redis不是每一個100ms將全部的key檢查一次,而是隨機抽取進行檢查(若是每隔100ms,所有key進行檢查,redis豈不是卡死)。內存
所以,若是隻採用按期刪除策略,會致使不少key到時間沒有刪除。因而,惰性刪除派上用場。也就是說在你獲取某個key的時候,redis會檢查一下,這個key若是設置了過時時間那麼是否過時了?若是過時了此時就會刪除。請求
採用按期刪除+惰性刪除就沒其餘問題了麼?im
不是的,若是按期刪除沒刪除key。而後你也沒即時去請求key,也就是說惰性刪除也沒生效。這樣,redis的內存會愈來愈高。那麼就應該採用內存淘汰機制最近最少算法(LRU)將最近的放到棧頭,將最少的(棧尾)淘汰cpu