Redis 數據過期及淘汰策略
過期策略
定時過期
在設置key
?的過期時間的同時,為該key
?創建一個定時器,讓定時器在key
?的過期時間來臨時,對key進行刪除。到過期時間就會立即清除。該策略可以立即清除過期的數據,對內存很友好,但是會占用大量的CPU
?資源去處理過期的數據,從而影響緩存的響應時間和吞吐量。
惰性過期
只有當訪問一個key
?時,才會判斷該key是否已過期,過期則清除。該策略可以最大化地節省CPU
?資源,卻對內存非常不友好。極端情況可能出現大量的過期key
?沒有再次被訪問,從而不會被清除,占用大量內存。
定期過期
每隔一定的時間,會掃描一定數量的數據庫的expires
?字典中一定數量的key
?,并清除其中已過期的key
?。該策略是前兩者的一個折中方案。通過調整定時掃描的時間間隔和每次掃描的限定耗時,可以在不同情況下使得CPU
?和內存資源達到最優的平衡效果。
淘汰策略
Redis的內存淘汰策略是指在Redis的用于緩存的內存不足時,如何申請新的內存。
- ?
noeviction
?:當內存不足以容納新寫入數據時,新寫入操作會報錯。 - ?
allkeys-lru
?:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key - ?
allkeys-random
?:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個key。 - ?
volatile-lru
?:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的key。 - ?
volatile-random
?:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個key。 - ?
volatile-ttl
?:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,有更早過期時間的key優先移除。
總結
過期策略選擇
惰性刪除、定期刪除組合模式。
淘汰策略選擇
?allkeys-lru
?