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實際實現的是惰性刪除和定期刪除兩種策略。