Redis 過期策略

2021-10-01 18:46:08 字數 812 閱讀 5860

redis有兩種策略來刪除過期的key,定時掃瞄刪除策略和惰性刪除策略。

redis將設定了過期時間的key放到乙個集合中,然後會定時掃瞄集合刪除到期的key。redis預設每秒進行10次過期掃瞄,過期掃瞄不會遍歷過期字典的所有的key,而是採用貪心策略:

從過期字典隨機選出20個key;

刪除這20個key中已經過期的key;

如果掃瞄時間達到了掃瞄時間上限(預設25ms),就終止本次掃瞄;

如果過期的key的比例超過了1/4,就重複步驟1;否則,終止本次掃瞄。

1、卡頓問題:

如果redis中大量的key同一時間過期了,會導致嚴重的卡頓問題:

redis定時掃瞄過期字典時,迴圈次數會明顯公升高,消耗的時間明顯增加。由於redis是單執行緒的,所以會延遲處理掃瞄期間接入的客戶端請求;

由於大量記憶體被**,記憶體管理器會頻繁**記憶體頁,也會產生一定的cpu消耗,影響效能。

2、難定位的慢查詢:

需要注意的是,redis定時掃瞄導致的請求變慢,無法從redis的slowlog中檢視到慢查詢記錄,因為slowlog記錄的是邏輯處理過程慢的請求,而不包含等待時間。

所以使用者需要注意,如果有大批量的key過期,要給過期時間設定乙個隨機值,而不能全部在同一時間過期。

從節點不會自主對過期的key進行處理。主節點在key到期時,會在aof檔案中增加一條del指令,同步到所有的從節點,從節點通過執行這條del指令來刪除過期的key。

由於指令同步是非同步進行的,所以主從節點對過期的key的處理,不是強一致性的,在同步期間會產生資料不一致的問題。

redis過期策略

1 noeviction 一旦記憶體滿則返回錯誤 2 allkeys lru 對所有的key進行lru 3 volatile lru 只對設定了過期的key進行lru 預設的方式 4 allkeys random 隨機剔除乙個key 5 volatile random 對設定過期的key進行隨機剔除...

Redis過期策略

1,設定過期時間 expire key time 單位為秒 setex string key,int seconds,string value 字串獨有的方式 注意 過期key的判定 檢查給定key是否存在於過期字典,如果存在,那麼取得key的過期時間。檢查當前unix時間戳是否大於key的過期時間...

Redis 過期策略

redis 缺省會每秒進行十次過期掃瞄,過期掃瞄不會遍歷過期字典中所有的 key,而是採用了一種簡單的貪心策略。從過期字典中隨機 20 個 key 刪除這 20 個 key 中已經過期的 key 如果過期的 key 比率超過 1 4,那就重複步驟 1 同時,為了保證過期掃瞄不會出現迴圈過度,導致執行...