1. 程式人生 > >redis過期鍵的刪除策略

redis過期鍵的刪除策略

Redis過期鍵的刪除策略

對於過期鍵一般有三種刪除策略

  • 定時刪除:在設定鍵的過期時間的同時,建立一個定時器(timer),讓定時器在鍵的過期時間來臨時,立即執行對鍵的刪除操作;
  • 惰性刪除:放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵;如果沒有過期,那就返回該鍵;
  • 定期刪除:每隔一段時間,程式就對資料庫進行一次檢查,刪除裡面的過期鍵。至於刪除多少過期鍵,以及要檢查多少個數據庫,則由演算法決定。

下面我們來看看三種策略的優缺比較:

  • 定時刪除策略對記憶體是最友好的:通過使用定時器,定時刪除策略可以保證過期鍵會盡可能快地被刪除,並釋放過期鍵所佔用的記憶體;但另一方面,定時刪除策略的缺點是,他對CPU是最不友好的:在過期鍵比較多的情況下,刪除過期鍵這一行為可能會佔用相當一部分CPU時間,在記憶體不緊張但是CPU時間非常緊張的情況下,將CPU時間用在刪除和當前任務無關的過期鍵上,無疑會對伺服器的響應時間和吞吐量造成影響;
  • 惰性刪除策略對CPU時間來說是最友好的:程式只會在取出鍵時才對鍵進行過期檢查,這可以保證刪除過期鍵的操作只會在非做不可的情況下進行;惰性刪除策略的缺點是,它對記憶體是最不友好的:如果一個鍵已經過期,而這個鍵又仍然保留在資料庫中,那麼只要這個過期鍵不被刪除,它所佔用的記憶體就不會釋放;
  • 定時刪除佔用太多CPU時間,影響伺服器的響應時間和吞吐量;惰性刪除浪費太多記憶體,有記憶體洩漏的危險。定期刪除策略是前兩種策略的一種整合和折中:
    • 定期刪除策略每隔一段時間執行一次刪除過期鍵操作,並通過限制刪除操作執行的時長和頻率來減少刪除操作對CPU時間的影響;
    • 通過定期刪除過期鍵,定期刪除策略有效地減少了因為過期鍵而帶來的記憶體浪費;
    • 定期刪除策略的難點是確定刪除操作執行的時長和頻率。

Redis的過期鍵刪除策略:Redis伺服器實際使用的是惰性刪除和定期刪除兩種策略。