Redis 緩存過期處理與內存淘汰機制


引子

計算機內存有限,越大越貴,Redis的高並發高性能都是基於內存的,用硬盤的話GG。

已過期的key如何處理?

設置了expire的key緩存過期了,但是服務器的內存還是會被占用,這是因為redis所基於的兩種刪除策略
redis有兩種策略:

  1. (主動)定時刪除
    定時隨機的檢查過期的key,如果過期則清理刪除。(每秒檢查次數在redis.conf中的hz配置)
  2. (被動)惰性刪除
    當客戶端請求一個已經過期的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過期時間的緩存中,刪除即將過期的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM