引子
計算機內存有限,越大越貴,Redis的高並發高性能都是基於內存的,用硬盤的話GG。
已過期的key如何處理?
設置了expire的key緩存過期了,但是服務器的內存還是會被占用,這是因為redis所基於的兩種刪除策略
redis有兩種策略:
- (主動)定時刪除
定時隨機的檢查過期的key,如果過期則清理刪除。(每秒檢查次數在redis.conf中的hz配置) - (被動)惰性刪除
當客戶端請求一個已經過期的key的時候,那么redis會檢查這個key是否過期,如果過期了,則刪除,然后返回一個nil。這種策略
友好,不會有太多的損耗,但是內存占用會比較高。
所以,雖然key過期了,但是只要沒有被redis清理,那么其實內存還是會被占用着的。
那么如果內存被Redis緩存占用慢了咋辦?
內存占滿了,可以使用硬盤,來保存,但是沒意義,因為硬盤沒有內存快,會影響redis性能。
所以,當內存占用滿了以后,redis提供了一套緩存淘汰機制:MEMORY MANAGEMENT
maxmemory :當內存已使用率到達,則開始清理緩存
* noeviction:舊緩存永不過期,新緩存設置不了,返回錯誤
* allkeys-lru:清除最少用的舊緩存,然后保存新的緩存(推薦使用)
* allkeys-random:在所有的緩存中隨機刪除(不推薦)
* volatile-lru:在那些設置了expire過期時間的緩存中,清除最少用的舊緩存,然后保存新的緩存
* volatile-random:在那些設置了expire過期時間的緩存中,隨機刪除緩存
* volatile-ttl:在那些設置了expire過期時間的緩存中,刪除即將過期的