一:Redis 的過期刪除策略及處理流程如下:
1. 過期刪除策略
Redis 通過以下兩種策略刪除過期鍵:
1.1 惰性刪除
- 觸發時機:當客戶端訪問某個鍵時,Redis 會檢查該鍵是否過期。
- 執行流程:
- 客戶端請求訪問鍵。
- Redis 檢查鍵的過期時間。
- 如果鍵已過期,Redis 刪除該鍵并返回空;如果未過期,返回鍵值。
1.2 定期刪除
- 觸發時機:Redis 定期隨機抽取部分鍵檢查是否過期。
- 執行流程:
- Redis 從設置了過期時間的鍵中隨機抽取一部分。
- 檢查這些鍵是否過期。
- 刪除已過期的鍵。
- 如果過期鍵比例超過一定閾值,重復該過程。
2. 處理流程
Redis 處理過期鍵的流程結合了惰性刪除和定期刪除:
-
客戶端訪問:
- 客戶端請求訪問鍵時,Redis 先檢查鍵是否過期,若過期則刪除并返回空。
-
定期檢查:
- Redis 定期隨機抽取部分鍵檢查過期情況,刪除已過期的鍵。
- 如果過期鍵比例較高,繼續檢查更多鍵。
-
內存回收:
- 通過惰性刪除和定期刪除,Redis 逐步回收過期鍵占用的內存。
3. 配置參數
- hz:控制定期刪除的頻率,默認 10,表示每秒執行 10 次檢查。
- maxmemory-samples:設置每次檢查時隨機抽取的鍵數量,默認 5。
4. 總結
- 惰性刪除:在訪問時檢查并刪除過期鍵。
- 定期刪除:定期隨機檢查并刪除過期鍵。
這兩種策略共同確保 Redis 高效管理內存,避免過期鍵占用過多資源。
在 Redis 中,緩存淘汰策略 和 過期策略 是兩種不同的機制,但它們共同作用于緩存數據的管理。以下是對 LRU 和 LFU 緩存淘汰策略的區別,以及它們與過期策略的應用場景的詳細解讀。
二、緩存淘汰策略:LRU 和 LFU 的區別
1. LRU(Least Recently Used,最近最少使用)
- 原理:優先淘汰最近最少被訪問的數據。
- 實現方式:Redis 使用近似 LRU 算法,通過隨機采樣一部分鍵,從中淘汰最近最少使用的鍵。
- 特點:
- 關注數據的訪問時間。
- 適合訪問模式有明顯熱點數據的場景。
- 適用場景:
- 熱點數據緩存(如新聞、社交媒體熱門內容)。
- 需要保留最近訪問數據的場景。
2. LFU(Least Frequently Used,最不常用)
- 原理:優先淘汰訪問頻率最低的數據。
- 實現方式:Redis 記錄每個鍵的訪問頻率,淘汰訪問次數最少的鍵。
- 特點:
- 關注數據的訪問頻率。
- 適合訪問模式較為均勻的場景。
- 適用場景:
- 訪問頻率差異較大的場景(如推薦系統、廣告系統)。
- 需要保留高頻訪問數據的場景。
3. LRU 和 LFU 的區別
特性 | LRU | LFU |
---|---|---|
關注點 | 數據的訪問時間 | 數據的訪問頻率 |
適用場景 | 有明顯熱點數據的場景 | 訪問頻率差異較大的場景 |
優點 | 簡單高效,適合短期熱點數據 | 更精準,適合長期高頻數據 |
缺點 | 可能誤刪高頻但近期未訪問的數據 | 需要額外記錄訪問頻率,開銷較大 |
三、緩存淘汰策略與過期策略的結合應用
在實際應用中,緩存淘汰策略和過期策略通常需要結合使用,以滿足不同的業務需求。
1. 熱點數據緩存
- 過期策略:為熱點數據設置較長的過期時間。
- 淘汰策略:使用
allkeys-lru
,優先保留最近訪問的熱點數據。 - 場景:新聞、社交媒體熱門內容。
2. 臨時數據緩存
- 過期策略:為臨時數據(如驗證碼、會話)設置較短的過期時間。
- 淘汰策略:使用
volatile-ttl
,優先淘汰即將過期的數據。 - 場景:驗證碼、會話緩存。
3. 冷數據清理
- 過期策略:為冷數據設置過期時間。
- 淘汰策略:使用
volatile-lfu
,優先淘汰訪問頻率低的冷數據。 - 場景:歷史數據、低頻訪問數據。
4. 不允許數據丟失的場景
- 過期策略:不設置過期時間,或設置較長的過期時間。
- 淘汰策略:使用
noeviction
,確保數據不被淘汰。 - 場景:金融、交易系統。
四、總結
1. LRU 和 LFU 的選擇
- 如果業務有明顯的熱點數據,選擇 LRU。
- 如果業務需要關注數據的訪問頻率,選擇 LFU。
2. 過期策略的選擇
- 如果數據有明確的生命周期,設置 過期時間。
- 如果需要及時清理過期鍵,啟用 定期刪除。
3. 結合使用
- 根據業務特點,合理配置 緩存淘汰策略 和 過期策略,以優化 Redis 的性能和資源利用率。
通過合理選擇策略,可以有效提升 Redis 的緩存命中率和系統性能。