Redis記憶體淘汰策略與過期key處理策略

2021-10-22 12:23:38 字數 1358 閱讀 9947

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都需要建立乙個定時器,到過期時間就會立即清...