計算機記憶體有限,越大越貴,redis的高併發高效能都是基於記憶體的,用硬碟的話gg。
設定了expire的key快取過期了,但是伺服器的記憶體還是會被占用,這是因為redis所基於的兩種刪除策略
redis有兩種策略:
(主動)定時刪除
• 定時隨機的檢查過期的key,如果過期則清理刪除。(每秒檢查次數在redis.conf中的hz配置)
(被動)惰性刪除
• 當客戶端請求乙個已經過期的key的時候,那麼redis會檢查這個key是否過期,如果過期了,則刪除,然後返回乙個nil。這種策 略對cpu比較友好,不會有太多的損耗,但是記憶體占用會比較高。
所以,雖然key過期了,但是只要沒有被redis清理,那麼其實記憶體還是會被占用著的。
記憶體佔滿了,可以使用硬碟,來儲存,但是沒意義,因為硬碟沒有記憶體快,會影響redis效能。
所以,當記憶體占用滿了以後,redis提供了一套快取淘汰機制:memory management
maxmemory:當記憶體已使用率到達,則開始清理快取
* noeviction:舊快取永不過期,新快取設定不了,返回錯誤
* volatile-lru:在那些設定了expire過期時間的快取中,清除最少用的舊快取,然後儲存新的快取
* volatile-random:在那些設定了expire過期時間的快取中,隨機刪除快取
* volatile-ttl:在那些設定了expire過期時間的快取中,刪除即將過期的
Redis 快取過期處理與記憶體淘汰機制
計算機記憶體有限,越大越貴,redis的高併發高效能都是基於記憶體的,用硬碟的話gg。設定了expire的key快取過期了,但是伺服器的記憶體還是會被占用,這是因為redis所基於的兩種刪除策略 redis有兩種策略 主動 定時刪除 被動 惰性刪除 所以,雖然key過期了,但是只要沒有被redis清...
Redis快取過期處理與記憶體淘汰機制
設定了expire的key快取過期了,但是伺服器的記憶體還是會被占用,這是因為redis所基於的兩種刪除策略redis有兩種策略 主動 定時刪除 定時隨機的檢查過期的key,如果過期則清理刪除。每秒檢查次數在redis.conf中的hz配置 被動 惰性刪除 當客戶端請求乙個已經過期的key的時候,那...
redis的快取過期策略與記憶體淘汰機制
redis採用了 定期刪除 惰性刪除 的過期策略 定期刪除 原理 定期刪除指的是redis預設每隔100ms就隨機抽取一些設定了過期時間的key,檢測這些key是否過期,如果過期了就將其刪掉。為什麼會選擇一部分,而不是全部 因為如果這是redis裡面有大量的key都設定了過期時間,那麼如果全部去檢測...