redis過期鍵刪除策略

2021-10-08 02:22:21 字數 1101 閱讀 2098

redis伺服器實際使用的過期鍵刪除策略有兩種:

通過配合使用這兩種刪除策略,伺服器可以很好地合理使用cpu時間和避免浪費記憶體空間之間取得平衡。

redis 缺省會每秒進行十次過期掃瞄,過期掃瞄不會遍歷過期字典中所有的 key,而是採用了一種簡單的貪心策略。

從過期字典中隨機 20 個 key;

刪除這 20 個 key 中已經過期的 key;

如果過期的 key 比率超過 1/4,那就重複步驟 1;

同時,為了保證過期掃瞄不會出現迴圈過度,導致執行緒卡死現象,演算法還增加了掃瞄時間的上限,預設不會超過 25ms。

如果某一時刻,有大量key同時過期,redis 會持續掃瞄過期字典,造成客戶端響應卡頓,因此設定過期時間時,就盡量避免這個問題,在設定過期時間時,可以給過期時間設定乙個隨機範圍,避免同一時刻過期。

1.1 如何配置定期刪除執行時間間隔

redis的定時任務預設是10s執行一次,如果要修改這個值,可以在redis.conf中修改hz的值。

redis.conf中,hz預設設為10,提高它的值將會占用更多的cpu,當然相應的redis將會更快的處理同時到期的許多key,以及更精確的去處理超時。 hz的取值範圍是1~500,通常不建議超過100,只有在請求延時非常低的情況下可以將值提公升到100。

1.2 單執行緒的redis,如何知道要執行定時任務?

redis是單執行緒的,執行緒不但要處理定時任務,還要處理客戶端請求,執行緒不能阻塞在定時任務或處理客戶端請求上,那麼,redis是如何知道何時該執行定時任務的呢?

redis 的定時任務會記錄在乙個稱為最小堆的資料結構中。這個堆中,最快要執行的任務排在堆的最上方。在每個迴圈週期,redis 都會將最小堆裡面已經到點的任務立即進行處理。處理完畢後,將最快要執行的任務還需要的時間記錄下來,這個時間就是接下來處理客戶端請求的最大時長,若達到了該時長,則暫時不處理客戶端請求而去執行定時任務。

定時刪除策略中,從刪除方法來看,必然會導致有key過期了但未從redis中刪除的情況。

面對這種情況,redis在操作乙個key時,會先判斷這個值是否過期,若已過期,則刪除該key;若未過期,則進行後續操作。

rdbaof

複製當伺服器執行在複製模式下時,從伺服器的過期刪除動作由主伺服器控制:

Redis 過期鍵刪除策略

當redis伺服器中的資料庫鍵超過過期時間,刪除策略主要為三種 惰性刪除 放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,過期的話,刪除該鍵 如果沒有過期,就返回該鍵。定期刪除 每隔一段時間,程式就對資料庫進行一次檢查,刪除裡面的過期鍵。至於要刪除多少過期鍵,以及要檢查多少個資料...

Redis的過期鍵刪除策略

對於redis伺服器來說,記憶體資源非常寶貴,如果一些過期鍵一直不被刪除,就會造成資源浪費,因此我們需要考慮乙個問題 如果乙個鍵過期了,它什麼時候會被刪除呢?常見的刪除策略有以下3種 惰性刪除 放任過期鍵不管,每次從鍵空間中獲取鍵時,檢查該鍵是否過期,如果過期,就刪除該鍵,如果沒有過期,就返回該鍵。...

Redis過期鍵刪除策略及淘汰策略

redis的所有鍵都可以設定過期策略,redis的每個設定了過期時間的key都會被放在乙個獨立的字典中,用於遍歷刪除。1.先區分兩個概念,被動刪除與主動刪除 1 被動刪除 key再被操作時,redis主動檢查key是否過期,過期則刪除 優劣 對cpu友好,只有cpu在被操作時刪除,不浪費cpu時間 ...