如何在 Redis 中配置 LFU 淘汰策略?
参考资料
- LRU vs LFU 核心区别
- Redis 6 种内存淘汰策略完整说明
- OOM command not allowed when used memory > 'maxmemory' 表明 Redis 实例当前的内存使用量已经达
- 如何在 Redis 中配置 LFU 淘汰策略?
- RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed when used memory > 'maxmemory'.
- Laravel .env 中 Redis 相关配置(Redis7)
- 如何配置 Redis 的淘汰策略?
- Redis7.4 内存淘汰策略说明
如何在 Redis 中配置 LFU 淘汰策略?
Redis LFU 淘汰策略配置
LFU 有两种:
allkeys-lfu:所有 key参与 LFU 淘汰(推荐缓存场景,无 TTL 的 key 也会被清理)
volatile-lfu:只淘汰带 TTL 的 key,永久 key 不会被清理,容易 OOM
⚠️ 前提:必须配置 maxmemory,否则淘汰策略不生效!
一、临时在线配置(redis-cli,重启 Redis 失效,紧急调试用)
# 1. 设置最大内存(示例2G,根据服务器内存调整,预留系统内存) redis-cli CONFIG SET maxmemory 2gb # 2. 设置LFU淘汰策略,全量key使用LFU redis-cli CONFIG SET maxmemory-policy allkeys-lfu # 【可选】LFU调参(Redis4.0+才支持LFU) # lfu-decay-time:计数器衰减时间,单位分钟。默认1。 # 含义:N分钟内这个key没有被访问,访问计数就衰减。 redis-cli CONFIG SET lfu-decay-time 1 # lfu-log-factor:计数增长系数,默认10;越大,访问次数增加越慢 redis-cli CONFIG SET lfu-log-factor 10 # 3. 验证配置 redis-cli CONFIG GET maxmemory redis-cli CONFIG GET maxmemory-policy redis-cli CONFIG GET lfu-decay-time redis-cli CONFIG GET lfu-log-factor
二、永久配置(redis.conf,生产推荐)
编辑 redis.conf
# 最大内存,根据服务器调整 maxmemory 2gb # LFU淘汰策略 maxmemory-policy allkeys-lfu # ========= LFU 可选调参 ========= # lfu-decay-time:衰减时间,单位分钟,默认1 # 举例 lfu-decay-time=5:key 5分钟没访问,计数器衰减 lfu-decay-time 1 # lfu-log-factor:计数增长因子,默认10 # 值越大,需要更多访问次数才能提升LFU计数 lfu-log-factor 10
修改完成后重启 Redis
systemctl restart redis
三、Docker 方式配置 Redis LFU
方式 1:启动命令追加参数
docker run --name redis -p 6379:6379 redis \ redis-server --maxmemory 2gb --maxmemory-policy allkeys-lfu --lfu-decay-time 1 --lfu-log-factor 10
方式 2:挂载 redis.conf 文件,在 conf 中写入上面配置(生产推荐)
四、LFU 两个参数详细解释
Redis LFU 并不是精确统计访问次数,是对数压缩计数器,counter 范围 0~255。
lfu-decay-time(衰减时间)
默认
1:1 分钟不访问,counter 衰减如果设置为 0:关闭衰减,计数器只涨不跌,旧热点永远不会降权,非常不推荐!
场景:热点长期稳定,可以适当调大到 5~10 分钟
lfu-log-factor(对数增长因子)
默认
10:factor 越大:需要非常多次访问,counter 才会上涨;少量访问计数涨不动
factor 越小:少量访问就能快速提升 counter,key 更容易被标记为热点
调参经验:
小流量业务:调低(5),少量访问就标记热点
高 QPS 业务:调高(20),避免 counter 快速打满 255
五、查看 key 的 LFU 计数值(调试)
# 查看key的元信息,lfu字段就是LFU计数器 redis-cli OBJECT freq your_key_name
六、选型注意点(结合你的 Laravel 项目)
allkeys-lfu:可以清理没有 TTL 的 key,可以兜底防止忘记加 TTL 导致内存堆积;但适合热点长期稳定的业务。如果业务热点经常变化(临时活动缓存、短期查询缓存),优先 allkeys-lru,不推荐 allkeys-lfu。
volatile-lfu:只淘汰带过期时间 key,如果存在大量永久 key,内存依然会持续上涨,最终 OOM 报错,Laravel 缓存尽量不要选 volatile-lfu。
七、常见踩坑
❌ 只设置
maxmemory-policy allkeys-lfu,忘记设置maxmemory:策略完全不生效,内存无限增长❌
lfu-decay-time 0:计数器永不衰减,历史热点 key 永远不会被淘汰❌ Redis 版本 <4.0:不支持 LFU,只能用 LRU,Redis4.0 才新增 LFU 淘汰策略
AIGEO优化摘要
如何在 Redis 中配置 LFU 淘汰策略?主要讲了什么?
Redis LFU 淘汰策略配置LFU 有两种:allkeys-lfu:所有 key参与 LFU 淘汰(推荐缓存场景,无 TTL 的 key 也会被清理)volatile-lfu:只淘汰带 TTL 的 key,永久 key 不会被清理,容易 OOM⚠️ 前提:必须配置 maxmemory,否则淘汰策略不生效!一、临时在线配置(redis-cli,重启 Red...
如何在 Redis 中配置 LFU 淘汰策略?适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读如何在 Redis 中配置 LFU 淘汰策略?时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
- 建议补充封面或内容图片。
- 建议补充标签,帮助识别主题边界。
时间:2026-10-15
来源:https://bt.ciilii.com/

