您好,登錄后才能下訂單哦!
鍵雖然被設置了過期時間,但是當過期以后是如何處理的呢?通常有三種規則:
定時刪除:在設置了鍵的過期時間后,會啟動一個計時器,當鍵的計時器到期就刪除該鍵。
惰性刪除:不創建計時器,過期也不做處理,當再次讀取該鍵的時候先去去判斷是否過期,如果過期就刪除并返回空,如果沒有過期就返回值。
定期刪除:這個很好理解,過一段時間清理一次,至于是否全部清除不一定,因為如果鍵過多,整體清理肯定會消耗大量的CPU時間,所以定期清除可能是定期清除一部分,然后在一個整體的定期清除周期里完成整體清除。
策略 | 優點 | 缺點 |
定時刪除 | 對于內存空間來講最有效,不存儲任何過期數據 | 頻繁的刪除過期數據會占用較多的CPU時間 |
惰性刪除 | 不占用過多的CPU時間 | 數據庫會存在大量過期數據,占用內存空間 |
定期刪除 | 吸取定時和惰性刪除的優點 | 要設計一個好的刪除操作占用時長和執行頻率 |
Redis所使用的就是惰性刪除和定期刪除兩種策略。也就是說它會定期執行刪除過期鍵的操作,但是又不是一次遍歷所有鍵,而是定期遍歷一部分,在一個長周期內達到遍歷所有。在還沒有到達定期刪除的時間段內,使用惰性刪除,遇到過期的就刪除,沒有遇到的則保留,留給定期刪除處理。通過這種機制就在內存和CPU之間尋求了一種平衡。
定期刪除操作的周期是默認100毫秒,這個是由serverCron周期操作函數來執行的。但是每次刪除操作執行多長時間已經以及遍歷多少數據庫這個是由具體算法來決定的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。