redis使用場景——緩存——數據過期策略
- 定期刪除(Active Expiration)
- 1. 快速模式(Fast Expiration Cycle)
- 工作流程:
- 特點:
- 優點:
- 2. 慢速模式(Slow Expiration Cycle)
- 工作流程:
- 特點:
- 優點:
- 惰性刪除(Lazy Expiration)
- 特點:
- redis的過期刪除策略
定期刪除(Active Expiration)
Redis 會定期(默認每秒 10 次)隨機抽取一些設置了過期時間的 key,檢查它們是否過期,如果過期就刪除。
1. 快速模式(Fast Expiration Cycle)
工作流程:
-
Redis 每次事件循環(event loop)都會執行快速過期檢查
-
從設置了過期時間的鍵中隨機抽取 20 個進行檢查
-
刪除其中已過期的鍵
-
如果發現超過 25% 的鍵已過期,則立即再抽取 20 個進行檢查(循環直到低于 25%)
特點:
-
執行頻率高(每秒執行多次)
-
每次檢查的鍵數量少
-
執行時間短(不超過 1ms)
-
主要處理即將過期的鍵
優點:
- 對系統性能影響小
- 能及時清理大部分過期鍵
2. 慢速模式(Slow Expiration Cycle)
工作流程:
- 按數據庫逐個檢查(Redis 默認有 16 個數據庫)
- 從過期字典(expires字典)中隨機抽取鍵進行檢查
- 默認每次掃描 20 個鍵
- 如果發現超過 25% 的鍵已過期,則繼續掃描
- 每次慢速模式的總執行時間不超過 hz 配置的 25%(默認 hz=10,即 25ms)
特點:
- 執行頻率低(默認每秒 1 次)
- 每次檢查的鍵數量多
- 執行時間較長(可配置,默認不超過 25ms)
- 全面掃描所有過期鍵
優點:
- 能清理更多過期鍵
- 防止大量鍵堆積過期
惰性刪除(Lazy Expiration)
當客戶端嘗試訪問一個 key 時,Redis 會先檢查該 key 是否設置了過期時間,如果已過期則立即刪除并返回空。
特點:
只有在訪問時才會檢查過期
,對不常訪問的 key,即使過期也可能長時間占用內存
redis的過期刪除策略
惰性刪除+定期刪除
兩種策略進行配合使用