Redis過期策略

1,設置過期時間

expire key time (單位爲秒)

setex(String key, int seconds, String value) -- 字符串獨有的方式

注意:

除了字符串自己有獨有的設置過期時間方法外,其他方法都要依靠expire方法來設置時間。
如果沒有設置時間,那麼緩存就是永不過期
如果設置了過期時間,之後又想讓緩存永不過期,使用 persist key(表示刪除key的過期時間)
過期key的判定

檢查給定key是否存在於過期字典,如果存在,那麼取得key的過期時間。
檢查當前UNIX時間戳是否大於key的過期時間,如果是,keyjin
2,三種過期策略

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

優點:對內存友好,保證內存被儘快釋放

缺點:對CPU時間最不友好。若過期key過多時,刪除過期key會佔用很多的CPU時間,(當內存不緊張而CPU緊張時)會對                   服務器的響應時間和吞吐量造成影響。

         

惰性刪除:放任key過期不管,但是每次去數據庫獲取key的時候去檢查是否過期,若過期,則刪除,返回null.

優點:對CPU時間友好。程序只會在取key的時候對key進行過期檢查,這可以保證刪除過期key的操作只會在非做不可的情況下             進行(如果此時還不刪除的話,我們就會獲取到了已經過期的key),並且刪除的目標僅限於當前處理的key。

缺點:若大量的過期的key沒有再次被訪問,從而不會被清除,這樣會佔用大量內存,而且服務器不會自己去釋放它們。

 

定期刪除:每隔一段時間,程序就對數據庫進行一次檢查,刪除裏面過期的key。

 定時刪除佔用太多CPU時間,影響服務器的響應時間和吞吐量

惰性刪除浪費太多內存,有內存泄漏的危險

定期刪除就是前兩種策略的折中。

服務器必須根據情況,合理地設置刪除操作的執行時長和執行頻率。

 

redis實際實現的是惰性刪除和定期刪除兩種策略。

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