频率计数的两个旋钮
LFU 策略有两个调参入口。log-factor 控制访问频率计数的增长曲线,默认值 10,数值越大计数增长越慢,也就是需要更多次访问才能体现出热度差异;decay-time 控制衰减速度,单位是分钟,某个键超过这个时长没有被访问,它的频率计数就会按指数规律递减。两个参数要按业务真实的访问周期来校准,否则热度判断会失真。
基本信息
| 计数增长参数 | log-factor,默认 10,越大增长越慢 |
|---|---|
| 衰减参数 | decay-time,默认 1 分钟,单位是分钟 |
| 生效前提 | 淘汰策略为 LFU 系时才有实际意义 |
| 查看方式 | 查看键的访问频率与该键是否可用 |
| 校准依据 | 业务真实访问周期与热点集中程度 |
典型使用场景
- 热点集中且访问频次差异大,用 LFU 提升缓存命中率后进一步调参
- 业务访问周期较长(例如每天一次),避免频率被过度衰减
- 排查重启或调参后命中率突然下降,确认计数曲线的变化
- 对比不同参数下的命中率,用真实流量决定取值
- 排查某些长期热键被误淘汰的现象
查看与调整
查看与调整
redis-cli CONFIG GET maxmemory-policy lfu-log-factor lfu-decay-time
redis-cli OBJECT FREQ mykey # 查看某个键当前的访问频率
redis-cli CONFIG SET lfu-log-factor 10 # 默认值,越大计数增长越慢
redis-cli CONFIG SET lfu-decay-time 5 # 衰减更慢,适合访问周期长的业务
redis-cli INFO stats | grep -E 'evicted_keys'参数影响
| 参数 | 调大的效果 | 适用判断 |
|---|---|---|
| log-factor | 计数增长更慢,需要更多访问才拉开差距 | 访问量极大、希望抑制噪声时 |
| log-factor 调小 | 计数增长更快,热度差异更早体现 | 访问量偏小时让热点更快浮现 |
| decay-time | 衰减更慢,低频键不容易掉档 | 访问周期长的业务 |
| decay-time 很小 | 计数快速归零,热度判断近似随机 | 一般不建议,除非访问极其密集 |
访问周期长的业务要把衰减时间调大,否则一个每天才被访问一次的键,每次访问前计数都已经衰减到底,热度无法累积。
调参之前先记录当前的命中率与淘汰计数作为基线,否则调整之后无法判断方向对错,只能靠感觉来回试。