天天看點

(四)、Redis删除政策---Redis設計與實作讀書筆記

過期鍵的删除政策

  • 定時删除:在設定鍵的過期時間時,同時建立一個定時器,讓定時器在鍵過期時間來臨時執行對鍵的删除操作【redis未使用該政策】
  • 惰性删除:當用戶端從鍵空間中擷取鍵時,通過db./expireIfNeeded函數檢查鍵是否過期,過期則删除,否則傳回該鍵
  • 定期删除:Redis伺服器周期性操作redis.c/serverCron函數執行,會調用redis.c/activeExpireCycle函數,該函數會在規定時間内,分多次周遊伺服器中各個資料庫,從該資料庫的expires字典中随機檢查一部分鍵的過期時間。(通過全局變量current_db記錄activeExpireCycle函數的檢查進度,在下次調用該函數時通過該變量繼續接着上一次的進度)

定時删除

  • 優點:對記憶體是友好的,通過定時器可以保證過期鍵盡可能快的被删除,并釋放其占用空間。
  • 缺點:對CPU時間是不友好的,在記憶體不緊張但是CPU時間非常緊張的情況下,切換cpu執行定時器事件,會影響伺服器的響應時間和吞吐量。
注意:建立定時器需要用到redis伺服器中的時間事件,而時間事件是使用無序連結清單實作的,查找一個事件的時間複雜度為O(n)—不能高效處理大量時間事件

惰性删除

  • 優點:對CPU時間是友好的,程式隻會在擷取鍵時對鍵進行檢查,删除過期鍵。
  • 缺點:對記憶體是不友好的,如果一個鍵過期,隻要這個鍵沒有被擷取就會一直儲存在資料庫中,它所占記憶體就一直不會被釋放。

定期删除

每隔一段時間執行一次删除過期鍵操作,并通過限制删除操作執行的時長和頻率來減少删除操作對CPU時間的影響。

  • 如果删除操作執行太頻繁,或執行時間太長,定期删除政策就會退化為定時删除政策
  • 如果删除操作執行太少,或執行時間太短,定期删除政策就會退化為惰性删除政策

繼續閱讀