過期鍵的刪除策略?
??1. 被動刪除(惰性刪除)??
- ??觸發時機??:當客戶端嘗試訪問某個鍵時,Redis會先檢查該鍵是否過期。就是說,我們不時時檢查每個鍵是否過期,而是在使用到這個鍵時檢查是否過期,過期就刪掉。
- ??優點??:對CPU友好,只在使用時檢查。
- ??缺點??:可能導致大量過期鍵堆積(內存泄漏風險)。如果一個鍵一直沒被用到,那就會一直堆在內存中,得不到清理
??2. 主動刪除(定期刪除)??
Redis通過??定期抽樣??主動清理過期鍵,每隔一定時間,抽取一定量的key進行檢查,后面會全部遍歷一遍。不會有得不到清理的key了。
有兩種模式:
-
??模式1:快速掃描(Redis 6.0前)??
- 每100ms執行一次,隨機抽取
20
個鍵檢查,刪除其中已過期的鍵。 - 若過期鍵比例超過
25%
,則重復該過程。
- 每100ms執行一次,隨機抽取
-
??模式2:自適應掃描(Redis 6.0+)??
- 動態調整掃描頻率和數量,基于內存壓力和過期鍵比例智能觸發。
redis過期策略是兩種模式的結合。
內存不足的淘汰策略?
當redis內存不足時(全是沒有過期的key),還要往reids里加數據時,Redis就會根據某一規則強制淘汰鍵(即使未過期)。
淘汰策略有8種
LRU:最近最少使用,當前時間-最后一次使用時間,這個值越大,淘汰優先級越高
LFU:最少頻率使用,相同時間內統計每個key使用頻率,頻率越低,淘汰優先級越高