redis採用了 「定期刪除+惰性刪除」 的過期策略
定期刪除
原理:定期刪除指的是redis預設每隔100ms就隨機抽取一些設定了過期時間的key,檢測這些key是否過期,如果過期了就將其刪掉。
為什麼會選擇一部分,而不是全部:因為如果這是redis裡面有大量的key都設定了過期時間,那麼如果全部去檢測一遍,cpu負載就會很高,會浪費大量的時間在檢測上面,甚至直接導致redis掛掉。所有只會抽取一部分而不會全部檢查。
出現問題:這樣的話就會出現大量的已經過期的key並沒有被刪除,這就是 為什麼有時候大量的key明明已經過了失效時間,但是redis的記憶體還是被大量占用的原因 ,為了解決這個問題,就需要 惰性刪除 這個策略了。
②惰性刪除
原理:惰性刪除不在是redis去主動刪除,而是在你要獲取某個key 的時候,redis會先去檢測一下這個key是否已經過期,如果沒有過期則返回給你,如果已經過期了,那麼redis會刪除這個key,不會返回給你。
記憶體淘汰機制
記憶體淘汰機制就保證了在redis的記憶體占用過多的時候,去進行記憶體淘汰,也就是刪除一部分key,保證redis的記憶體佔用率不會過高
edis提供了6中記憶體淘汰策略,我們可以去進行選擇,六中策略如下:
①noeviction:當記憶體不足以容納新寫入資料時,新寫入操作會報錯,無法寫入新資料,一般不採用。
②allkeys-lru:當記憶體不足以容納新寫入資料時,在鍵空間中,移除最近最少使用的key,這個是最常用的。
③allkeys-random:當記憶體不足以容納新寫入的資料時,在鍵空間中,隨機移除key,一般也不使用。
④volatile-lru:volatile-lru:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,移除最近最少使用的key(這個一般不太合適) 。
⑤volatile-random:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,隨機移除某個key 。
⑥volatile-ttl:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,有更早過期時間的key優先移除。
Redis快取鍵的過期策略
命令名功能 expire 將鍵的生存時間設定為ttl秒 pexpire 將鍵的生存時間設定為ttl毫秒 expireat 將鍵的生存時間設定為timestamp指定的秒數時間戳 pexpireat 將鍵的生存時間設定為timestamp指定的毫秒數時間戳 前三個命令最終都會轉換成pexpireat命...
redis 快取的過期刪除策略
世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是乙個不斷追求完美的過程。快取過期以後如何刪除呢?第一,主動刪除,即後台建立定時任務,每隔一段時間遍歷所有有過期時間的快取,判斷是否過期,如果過期則進行刪除 第二,被動刪除,即每次取資料前判斷一下所取的資料是否有過期時間設定,如果有,判斷其...
Redis的過期策略和記憶體淘汰策略
redis的過期策略 我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 定時過期 每個設定過期時間的key都需要建立乙個定時器,到過期時間就會立即清...