一、基礎配置步驟?
設置內存上限?
在 redis.conf 配置文件中添加以下指令,限制 Redis 最大內存使用量(例如設置為 4GB):
maxmemory 4gb
選擇 LFU 淘汰策略?
根據鍵的作用域選擇策略:
# 所有鍵參與淘汰
maxmemory-policy allkeys-lfu
# 僅有過期時間的鍵參與淘汰
maxmemory-policy volatile-lfu
動態配置(運行時生效)?
通過 CONFIG SET 命令動態調整策略(無需重啟 Redis):
CONFIG SET maxmemory-policy allkeys-lfu
二、核心調優參數?
lfu-log-factor(訪問頻率計數器系數)?
作用?:控制訪問頻率計數器(logc)的增長速度。值越大,計數器增長越慢,高頻鍵越難被淘汰。
默認值?:10
建議調整場景?:
高并發場景(如瞬時訪問激增):增大該值(如 20),避免短期高頻訪問導致計數器膨脹過快。
需要嚴格區分高頻/低頻鍵:降低該值(如 5),加速計數器增長。
配置示例?:
CONFIG SET lfu-log-factor 15
lfu-decay-time(頻率衰減時間窗口)?
作用?:定義訪問頻率的衰減周期(單位:分鐘)。Redis 會根據該值定期衰減 logc 值,避免歷史高頻但近期無訪問的鍵長期駐留。
默認值?:1(每分鐘觸發一次衰減)
建議調整場景?:
數據訪問模式穩定:增大該值(如 10),減少衰減頻率,保留長期高頻鍵。
需要快速淘汰舊數據:減小該值(如 0.5),加速低頻鍵的淘汰。
配置示例?:
CONFIG SET lfu-decay-time 5
三、場景化配置建議?
場景? ?推薦配置? ?說明?
熱點數據緩存? lfu-log-factor=10 lfu-decay-time=1 默認配置,平衡高頻鍵保留與舊數據淘汰效率。
突發流量過濾? lfu-log-factor=20 抑制短期高頻訪問對計數器的過度影響,避免誤淘汰長期高頻鍵。
歷史數據長期保留? lfu-decay-time=30 降低衰減頻率,保留歷史高頻訪問但近期未活躍的數據(如日志分析場景)。
內存敏感型應用? maxmemory-samples=10 增大淘汰候選集抽樣數量(默認5),提升淘汰精準度,但略微增加CPU開銷。
四、驗證配置生效?
查看當前配置?:
CONFIG GET maxmemory-policy
CONFIG GET lfu-log-factor
CONFIG GET lfu-decay-time
監控淘汰效果?:
使用 INFO stats 命令觀察 evicted_keys 和 keyspace_hits 指標,評估淘汰策略是否匹配業務訪問模式。
通過合理調整上述參數,可在內存限制下最大化高頻數據的緩存命中率,平衡性能與資源消耗。