Redis的 過期策略 和 淘汰策略

2021-09-28 21:10:33 字數 1160 閱讀 5229

惰性過期(被動淘汰)

定期過期

redis 中同時使用了惰性過期和定期過期兩種過期策略

redis中定期過期策略演算法大致實現

redis.config中hz定義了servercron任務的執行週期,預設為10,即cpu空閒時每秒執行10次

每次過期key清理的時間不超過cpu時間的25%,即若hz=1,則一次清理時間最大為250ms,若hz=10,則一次清理時間最大為25ms

清理時依次遍歷所有的db

從db中隨機取20個key,判斷是否過期,若過期,則逐出

若有5個以上key過期,則重複步驟4,否則遍歷下乙個db

在清理過程中,若達到了25%cpu時間,退出清理過程

淘汰策略

含義volatile-lru

根據 lru 演算法刪除設定了超時屬性(expire)的鍵,直到騰出足夠記憶體為止。如果沒有可刪除的鍵物件,回退到 noeviction 策略。

allkeys-lru

根據 lru 演算法刪除鍵,不管資料有沒有設定超時屬性,直到騰出足夠記憶體為止。

volatile-lfu

在帶有過期時間的鍵中選擇最不常用的。

allkeys-lfu

在所有的鍵中選擇最不常用的,不管資料有沒有設定超時屬性。

volatile-random

在帶有過期時間的鍵中隨機選擇。

allkeys-random

隨機刪除所有鍵,直到騰出足夠記憶體為止。

volatile-ttl

根據鍵值物件的 ttl 屬性,刪除最近將要過期資料。如果沒有,回退到 noeviction 策略。

noeviction

預設策略,不會刪除任何資料,拒絕所有寫入操作並返回客戶端錯誤資訊(error)oomcommand not allowed when used memory,此時 redis 只響應讀操作

建議使用 volatile-lru,在保證正常服務的情況下,優先刪除最近最少使用的 key

在 redis.conf 中# maxmemory-policy noeviction配置淘汰策略

Redis 過期策略 和 淘汰策略

適用於 很多的 key 可能會到了過期時間還沒有進行刪除的情況。放任 key 過期不管,但是每次從鍵空間中獲取 key 時,都檢查取得的 key 是否過期,如果過期的話,就刪除該 key 如果沒有過期,就返回該 key 每隔一段時間程式就對資料庫進行一次檢查,刪除裡面的過期的 key 至於要刪除多少...

Redis的過期策略和淘汰策略

redis 過期策略都有哪些,有事怎樣刪除的 過期刪除策略 定時刪除 優點 對記憶體最友好的。可以及時釋放鍵所占用的記憶體。缺點 對 cpu 不友好。特別在過期鍵比較多的情況下,刪除過期鍵會占用相當一部分 cpu 時 間。同時在記憶體不緊張,cpu緊張的情況下,將 cpu 用在刪除和當前任務不想關的...

Redis的過期策略和記憶體淘汰策略

redis的過期策略 我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 定時過期 每個設定過期時間的key都需要建立乙個定時器,到過期時間就會立即清...