天天看點

Redis(五):關于過期鍵(2)過期鍵的删除

鍵雖然被設定了過期時間,但是當過期以後是如何處理的呢?通常有三種規則:

定時删除:在設定了鍵的過期時間後,會啟動一個計時器,當鍵的計時器到期就删除該鍵。

惰性删除:不建立計時器,過期也不做處理,當再次讀取該鍵的時候先去去判斷是否過期,如果過期就删除并傳回空,如果沒有過期就傳回值。

定期删除:這個很好了解,過一段時間清理一次,至于是否全部清除不一定,因為如果鍵過多,整體清理肯定會消耗大量的CPU時間,是以定期清除可能是定期清除一部分,然後在一個整體的定期清除周期裡完成整體清除。

政策

優點

缺點

定時删除

對于記憶體空間來講最有效,不存儲任何過期資料

頻繁的删除過期資料會占用較多的CPU時間

惰性删除

不占用過多的CPU時間

資料庫會存在大量過期資料,占用記憶體空間

定期删除

吸取定時和惰性删除的優點

要設計一個好的删除操作占用時長和執行頻率

Redis所使用的就是惰性删除和定期删除兩種政策。也就是說它會定期執行删除過期鍵的操作,但是又不是一次周遊所有鍵,而是定期周遊一部分,在一個長周期内達到周遊所有。在還沒有到達定期删除的時間段内,使用惰性删除,遇到過期的就删除,沒有遇到的則保留,留給定期删除處理。通過這種機制就在記憶體和CPU之間尋求了一種平衡。

定期删除操作的周期是預設100毫秒,這個是由serverCron周期操作函數來執行的。但是每次删除操作執行多長時間已經以及周遊多少資料庫這個是由具體算法來決定的。

      本文轉自linuxjavachen  51CTO部落格,原文連結:http://blog.51cto.com/littledevil/1813960,如需轉載請自行聯系原作者

繼續閱讀