redis過期鍵刪除策略

一、過期鍵刪除三種策略簡介

1、定時刪除策略

在設置鍵的過期時間的同時,創建一個定時器(timer),讓定時器在鍵的過期時間來臨時,立即執行對鍵的刪除操作。

   優點:對內存是最友好的,保證過期鍵會儘可能快地被刪除,並釋放過期鍵所佔用的內存。

   缺點:對cpu時間是最不友好的,過期鍵比較多的情況下,刪除鍵會佔用相當一部分的cpu時間,無疑會對服務器的響應時間和吞吐量造成影響。

2、惰性刪除策略

程序只會在取出鍵時纔對鍵進行過期檢查。

   優點:對cpu時間來說是最友好的,可以保證過期鍵的刪除操作只會在非做不可的情況下進行,並且刪除目標僅限於當前處理的鍵。

   缺點:對內存是最不友好的,如果一個鍵已經過期,而這個鍵又仍然保留在數據庫中,只要過期鍵不被刪除,佔用的內存就不會被釋放。

3、定期刪除策略

每隔一段時間執行一次刪除過期鍵的操作,通過限制刪除操作執行時長和頻率來減少刪除操作對cpu時間的影響,是對定時刪除策略和惰性刪除策略的整合和折中。

   難點是確定刪除操作執行的時長和頻率,如果刪除太頻繁或執行時間過長,就會退化稱定時刪除策略;如果刪除操作執行的太少或者執行時間太短,又會退化爲惰性刪除策略,出現浪費內存的情況。

二、redis的過期刪除策略

使用惰性刪除和定期刪除兩種策略,通過兩種策略的配合,可以很好地在合理使用cpu時間和避免浪費內存之間取得平衡。

1、惰性刪除策略的實現

                 

2、定期刪除策略的實現

每當redis服務器的服務器週期性操作serverCron函數執行時,activeExpireCycle函數被調用,分多次遍歷服務器

中的各個數據庫,從數據庫的expires字典中隨機檢查一部分鍵的過期時間,並刪除其中的過期鍵。

activeExpireCycle函數的工作模式:

a、函數每次運行時,都從一定數量的數據庫中取出一定數量的隨機鍵進行檢查,並刪除其中的過期鍵。

b、全局變量current_db會記錄當前activeExpireCycle函數檢查的進度,並在下一次activeExpireCycle函數調用時,

接着上一次的進度進行處理。

c、隨着activeExpireCycle函數的不斷執行,服務器中的所有數據庫都會被檢查一遍,這時函數將current_db變量

重置爲0,然後再次開始新一輪的檢查工作。                                   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章