redis 淘汰機(jī)制

a.定期刪除+惰性刪除

1.定期刪除

指的是 redis 默認(rèn)是每隔 100ms 就隨機(jī)抽取一些設(shè)置了過期時間的 key,檢查其是否過期,如果過期就刪除。


假設(shè) redis 里放了 10w 個 key,都設(shè)置了過期時間,你每隔幾百毫秒,就檢查 10w 個 key,那 redis 基本上就死了,cpu 負(fù)載會很高的,消耗在你的檢查過期 key 上了。


注意,這里可不是每隔 100ms 就遍歷所有的設(shè)置過期時間的 key,那樣就是一場性能上的災(zāi)難。實際上 redis 是每隔 100ms 隨機(jī)抽取一些 key 來檢查和刪除的。但是問題是,定期刪除可能會導(dǎo)致很多過期 key 到了時間并沒有被刪除掉,那咋整呢?


2.惰性策略

惰性策略就是說,在你獲取某個 key 的時候,redis 會檢查一下 ,這個 key 如果設(shè)置了過期時間那么是否過期了?如果過期了此時就會刪除,不會給你返回任何東西。但是實際上這還是有問題的,如果定期刪除漏掉了很多過期 key,然后你也沒及時去查,也就沒走惰性刪除,此時會怎么樣?


b.內(nèi)存淘汰機(jī)制

volatile-lru

對于設(shè)置了過期時間的記錄根據(jù)lru(latest recently used)的方法進(jìn)行刪除,不推薦。


allkeys-lru

對于所有記錄使用lru規(guī)則進(jìn)行刪除,推薦。


volatile-random

對于設(shè)置了過期時間的記錄隨機(jī)刪除,不推薦。


allkeys-random

對于所有記錄隨機(jī)刪除,不推薦。


volatile-ttl

對于設(shè)置了過期時間的記錄,刪除離當(dāng)前時間最近的記錄,不推薦。


noeviction

不刪除記錄,也就是當(dāng)達(dá)到內(nèi)存最大值的時候,再來新記錄直接報錯。這事redis的默認(rèn)過期策略,不推薦。


從對redis的過期策略分析來看我們很明顯應(yīng)該使用allkeys-lru來作為我們的過期策略。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容