Redis 過期策略
阿新 • • 發佈:2019-01-05
redis設定過期時間
expire key time(以秒為單位)–這是最常用的方式
setex(String key, int seconds, String value)–字串獨有的方式除了字串自己獨有設定過期時間的方法外,其他方法都需要依靠expire方法來設定時間,如果沒有設定時間,那快取就是永不過期。
三種過期策略
1.定時刪除
在設定key的過期時間時,為key建立一個定時器,讓定時器在key的過期時間來臨時,對key進行刪除。
優點:記憶體會被儘快釋放,對記憶體友好。
缺點:若過期key很多,刪除這些key會佔用很多的CPU時間,對CPU不友好,若為每一個設定過期時間的key建立一個定時器(產生大量定時器),效能影響嚴重。
2.惰性刪除
每次通過取key值的時候檢查是否過期,若過期,則刪除,返回null。
優點:刪除操作只發生在通過key取值時發生,而且只刪除當前key,對CPU友好。
缺點:若大量的key在超出超時時間後,很久一段時間內,都沒有被獲取過,那麼可能發生記憶體洩露(無用的垃圾佔用了大量的記憶體)
3.定期刪除
每隔一段時間執行一次輪詢刪除過期key
優點:通過限制刪除操作的時長和頻率,一定程度上減少刪除操作對CPU的佔用和降低惰性刪除對記憶體佔用的缺點。
缺點:在記憶體友好方面,不如定時刪除,在CPU時間友好方面,不如惰性刪除。
難點:如何設定時長和頻率。
memcached與redis
memcached只使用了惰性策略,redis使用了惰性和定期策略。