redis對於過期鍵有三種清除策略:
1. 被動刪除:當讀/寫乙個已經過期的key時,會觸發惰性刪除策略,直接刪除掉這個過期
key2. 主動刪除:由於惰性刪除策略無法保證冷資料被及時刪掉,所以redis會定期主動淘汰一
批已過期的key
3. 當前已用記憶體超過maxmemory限定時,觸發主動清理策略
主動清理策略在redis 4.0 之前一共實現了 6 種記憶體淘汰策略,在 4.0 之後,又增加了 2 種策
略,總共8種:
a) 針對設定了過期時間的key做處理:
1.volatile
-ttl:在篩選時,會針對設定了過期時間的鍵值對,根據過期時間的先後進行刪
除,越早過期的越先被刪除。
2.volatile
-random:就像它的名稱一樣,在設定了過期時間的鍵值對中,進行隨機刪除。
3.volatile
-lru:會使用 lru 演算法篩選設定了過期時間的鍵值對刪除。
4.volatile
-lfu:會使用 lfu 演算法篩選設定了過期時間的鍵值對刪除。
b) 針對所有的key做處理:
5. allkeys-random:從所有鍵值對中隨機選擇並刪除資料。
6. allkeys-lru:使用 lru 演算法在所有資料中進行篩選刪除。
7. allkeys-lfu:使用 lfu 演算法在所有資料中進行篩選刪除。
c) 不處理:
8. noeviction:不會剔除任何資料,拒絕所有寫入操作並返回客戶端錯誤資訊"(error)
oom command not allowed when used memory",此時redis只響應讀操作。
lru 演算法(least recently used,最近最少使用)
淘汰很久沒被訪問過的資料,以最近一次訪問時間作為參考。
lfu 演算法(least frequently used,最不經常使用)
淘汰最近一段時間被訪問次數最少的資料,以次數作為參考。
當存在熱點資料時,lru的效率很好,但偶發性的、週期性的批量操作會導致lru命中率急劇下
降,快取汙染情況比較嚴重。這時使用lfu可能更好點。根據自身業務型別,配置好maxmemory-
policy
(預設是noeviction),推薦使用volatile
-lru。如
果不設定最大記憶體,當 redis 記憶體超出物理記憶體限制時,記憶體的資料會開始和磁碟產生頻繁的交
換 (swap),會讓 redis 的效能急劇下降。
當redis執行在主從模式時,只有主結點才會執行過期刪除策略,然後把刪除操作」del key」同
步到從結點刪除資料
redis過期策略與記憶體淘汰機制總結
redis常用於有時間限制的資料儲存,可以在set key的時候給乙個expire time 過期時間 通過設定過期時間可以指定這個key可以存活的時間,那麼設定的過期時間到了後,redis是怎麼對過期的key進行刪除的呢?下面分別從redis過期策略和記憶體淘汰機制說起 定期刪除 redis預設每...
Redis記憶體管理 鍵過期策略 記憶體淘汰策略
記憶體使用統計指標 可以參考文章 其中需要重點關注的指標 used memory redis使用的記憶體總量 used memory rss 系統分配的記憶體總量 mem fragmentation ratio 記憶體碎片率 used memory rss used memory 當 mem fra...
Redis的過期策略和記憶體淘汰策略
redis的過期策略 我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 定時過期 每個設定過期時間的key都需要建立乙個定時器,到過期時間就會立即清...