Redis快取過期處理與記憶體淘汰機制

2021-10-19 01:46:12 字數 1001 閱讀 6177

設定了expire的key快取過期了,但是伺服器的記憶體還是會被占用,這是因為redis所基於的兩種刪除策略redis有兩種策略

(主動)定時刪除

定時隨機的檢查過期的key,如果過期則清理刪除。(每秒檢查次數在redis.conf中的hz配置)

(被動)惰性刪除

當客戶端請求乙個已經過期的key的時候,那麼redis會檢查這個key是否過期,如果過期了,則刪除,然後返回乙個nil。這種策略對cpu比較友好,不會有太多的損耗,但是記憶體占用會比較高。

所以,雖然key過期了,但是只要沒有被redis清理,那麼其實記憶體還是會被佔

記憶體佔滿了,可以使用硬碟,來儲存,但是沒意義,因為硬碟沒有記憶體快,會影響redis效能。所以,當記憶體占用滿了以後,redis提供了一套快取淘汰機制:memory management,在redis.conf配置

maxmemory (byte):當記憶體已使用率到達,則開始清理快取

maxmemory-policy: 執行記憶體清理的策略

maxmemory-policy的可選值:

noeviction:舊快取永不過期,新快取設定不了,返回錯誤

allkeys-lru:清除最少用的舊快取,然後儲存新的快取(推薦使用)

allkeys-random:在所有的快取中隨機刪除(不推薦)

volatile-lru:在那些設定了expire過期時間的快取中,清除最少用的舊快取,然後儲存新的快取

volatile-random:在那些設定了expire過期時間的快取中,隨機刪除快取

volatile-ttl:在那些設定了expire過期時間的快取中,刪除即將過期的

lru: least recently used 最近最少使用

lfu: least frequently used 最少頻繁使用

Redis 快取過期處理與記憶體淘汰機制

計算機記憶體有限,越大越貴,redis的高併發高效能都是基於記憶體的,用硬碟的話gg。設定了expire的key快取過期了,但是伺服器的記憶體還是會被占用,這是因為redis所基於的兩種刪除策略 redis有兩種策略 主動 定時刪除 被動 惰性刪除 所以,雖然key過期了,但是只要沒有被redis清...

Redis 快取過期處理與記憶體淘汰機制

計算機記憶體有限,越大越貴,redis的高併發高效能都是基於記憶體的,用硬碟的話gg。設定了expire的key快取過期了,但是伺服器的記憶體還是會被占用,這是因為redis所基於的兩種刪除策略 redis有兩種策略 主動 定時刪除 定時隨機的檢查過期的key,如果過期則清理刪除。每秒檢查次數在re...

redis的快取過期策略與記憶體淘汰機制

redis採用了 定期刪除 惰性刪除 的過期策略 定期刪除 原理 定期刪除指的是redis預設每隔100ms就隨機抽取一些設定了過期時間的key,檢測這些key是否過期,如果過期了就將其刪掉。為什麼會選擇一部分,而不是全部 因為如果這是redis裡面有大量的key都設定了過期時間,那麼如果全部去檢測...