引子
計算機內存有限放典,越大越貴逝变,Redis的高并發(fā)高性能都是基于內存的,用硬盤的話GG奋构。
已過期的key如何處理壳影?
設置了expire的key緩存過期了,但是服務器的內存還是會被占用弥臼,這是因為redis所基于的兩種刪除策略
redis有兩種策略:
(主動)定時刪除
定時隨機的檢查過期的key宴咧,如果過期則清理刪除。(每秒檢查次數在redis.conf中的hz配置)
(被動)惰性刪除
當客戶端請求一個已經過期的key的時候径缅,那么redis會檢查這個key是否過期掺栅,如果過期了烙肺,則刪除,然后返回一個nil氧卧。這種策略對cpu比較友好桃笙,不會有太多的損耗,但是內存占用會比較高沙绝。
所以搏明,雖然key過期了,但是只要沒有被redis清理闪檬,那么其實內存還是會被占用著的熏瞄。
那么如果內存被Redis緩存占用慢了咋辦?
內存占滿了谬以,可以使用硬盤强饮,來保存,但是沒意義为黎,因為硬盤沒有內存快邮丰,會影響redis性能。
所以铭乾,當內存占用滿了以后剪廉,redis提供了一套緩存淘汰機制:MEMORY MANAGEMENT
maxmemory:當內存已使用率到達,則開始清理緩存
3.0有6種后期到了8種炕檩。這里介紹6種策略
* noeviction:舊緩存永不過期斗蒋,新緩存設置不了,返回錯誤
* allkeys-lru:清除最少用的舊緩存笛质,然后保存新的緩存(推薦使用)
* allkeys-random:在所有的緩存中隨機刪除(不推薦)
* volatile-lru:在那些設置了expire過期時間的緩存中泉沾,清除最少用的舊緩存,然后保存新的緩存
* volatile-random:在那些設置了expire過期時間的緩存中妇押,隨機刪除緩存
* volatile-ttl:在那些設置了expire過期時間的緩存中跷究,刪除即將過期的