Redis怎样平滑过渡从LRU向LFU的策略切换_建议在业务低峰期执行配置更改以安全重建频次计数字典

梦芳同学_7139

梦芳同学_7139

2026-04-07

821人浏览

原创

不会主动丢数据,但内存超限时淘汰逻辑立即变为lfu,新写入低频key可能比久存冷key更早被淘汰;lfu初始化counter非零且带随机偏移,惰性填充计数器,高峰期切换易引发多轮非预期驱逐。

redis怎样平滑过渡从lru向lfu的策略切换_建议在业务低峰期执行配置更改以安全重建频次计数字典

Redis 6.0+ 切换 maxmemory-policy 从 allkeys-lru 到 allkeys-lfu 会丢数据吗?

不会主动丢数据,但内存超限时的淘汰行为逻辑会立刻改变——新策略下,刚写入但访问频次低的 key 可能比“冷但存在久”的 key 更早被淘汰。

LFU 启动后,Redis 会为每个 key 初始化一个初始频次(counter),默认不是 0,而是带随机衰减偏移(避免新 key 一上来就被秒杀)。这个初始化过程不触发淘汰,但后续内存压力到来时,淘汰决策就完全按 LFU 分数走了。

  • lfu-log-factor 和 lfu-decay-time 会影响频次衰减速度,不调的话默认值(10 和 1)在高吞吐场景下容易让热点 key 的计数“涨不动”或“掉太快”
  • 切换前后,INFO memory 中的 evicted_keys 会继续累加,但统计依据已切换,不能跨策略对比“淘汰效率”
  • 如果原 LRU 策略下已逼近 maxmemory,切 LFU 后首次触发淘汰时可能集中清掉一批低频 key,造成短时缓存命中率跳变

为什么必须在业务低峰期 reload 配置?

不是因为配置热加载本身卡顿,而是 LFU 的频次计数字典(lfu_counter 字段)需要在内存中为所有 key 补全——这个过程发生在第一次执行 MEMORY PURGE 或下一个定时淘汰周期开始前,是惰性填充的,但会增加单次命令响应延迟抖动。

  • Redis 不会在 CONFIG SET 时立即扫描全部 key 填充计数器,而是在访问 key 时顺手初始化;但淘汰逻辑启动后,未初始化的 key 默认计数取最小值,极易被误杀
  • 高峰期大量 key 首次参与 LFU 淘汰计算,可能引发多轮非预期驱逐,尤其当 lfu-log-factor 设置过小(如 1)时,不同访问频次的 key 计数区分度极低
  • 用 redis-cli --scan | xargs redis-cli touch 强制预热所有 key 的 LFU 计数器?别试——touch 不触发 LFU 初始化,且全量 scan 在大实例上本身就会打满 CPU

CONFIG SET maxmemory-policy allkeys-lfu 后,哪些 key 会被优先淘汰?

不是“访问次数最少”的 key,而是“LFU 分数最低”的 key。这个分数由原始频次经对数缩放 + 衰减时间校准得出,公式是:score = log(factor * counter) + age_in_minutes / decay_time。

  • 刚写入的 key:counter 初始为 5~10(取决于 lfu-log-factor),但 age_in_minutes 为 0,分数偏低 → 容易被删
  • 高频老 key:即使 counter 没增长,只要没被衰减掉,分数仍高;但如果 lfu-decay-time 设成 0(禁用衰减),计数只增不减,最终退化成纯访问次数排序
  • 用 OBJECT FREQ 查看某个 key 当前 LFU 分数时,注意它返回的是原始 counter 值(0–255),不是最终淘汰用的 score

如何验证 LFU 策略已生效且行为符合预期?

别只看 CONFIG GET maxmemory-policy 返回 allkeys-lfu 就算完——得确认淘汰动作真按 LFU 逻辑走,且频次统计没被异常重置。

  • 先设 lfu-log-factor 10 和 lfu-decay-time 1(默认值),用 DEBUG HTSTATS 0 观察 dict 中 key 的平均访问频次分布是否随压测逐渐分层
  • 写入一批 key,用 OBJECT FREQ 批量查初始 counter,再反复访问其中几个,隔几分钟再查——正常应看到被访问 key 的 counter 明显高于其他
  • 触发一次人工淘汰(CONFIG SET maxmemory 1 再立刻设回原值),然后查 INFO stats 中的 evicted_keys 增量,并比对被删 key 的 OBJECT FREQ 值是否显著偏低

LFU 的核心复杂点不在开关本身,而在频次统计的惰性初始化、衰减时机与淘汰触发之间的竞态——这些细节不暴露在日志里,只能靠 OBJECT FREQ 和压测节奏交叉验证。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4529

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4095

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7592

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7522

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1136

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6558

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.8万人学习