1. 程式人生 > 實用技巧 >Redis 快取過期處理與記憶體淘汰機制

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過期時間的快取中,刪除即將過期的