Redis 7.0内存淘汰策略有何改进?如何进行性能优化?

大磊君_5561

大磊君_5561

2026-07-22

511人浏览

原创

redis 7.0未新增淘汰策略类型,仍为8种,改进在于底层行为调优和默认配置收紧:maxmemory-samples建议调高至10或15以提升精度;lazyfree-lazy-eviction默认启用异步淘汰但需防oom;volatile-*策略无过期key时退化为noeviction且日志提示更明确;allkeys-lru需满足持续访问、预留20%内存余量、禁用lazyfree-lazy-eviction才可控;aof重写引发内存暴增需调低auto-aof-rewrite-percentage至70左右并启用activedefrag;命中率根本取决于数据结构优化(如hash)、ttl随机化及冷热分离部署。

redis 7.0内存淘汰策略有何改进?如何进行性能优化?

Redis 7.0的淘汰策略本身没有新增类型

Redis 7.0 没有增加新的 maxmemory-policy 类型,仍维持 8 种策略(noeviction、volatile-lru、allkeys-lfu 等)。所谓“改进”其实是底层行为调优和默认配置收紧,而非策略逻辑变更:

  • maxmemory-samples 默认值仍为 5,但文档更明确建议:写入密集场景可设为 10 或 15 来提升 LRU/LFU 的淘汰精度,代价是轻微 CPU 上升
  • lazyfree-lazy-eviction 默认为 yes,意味着淘汰动作可能异步化——这在高吞吐下能降低主线程延迟,但若 used_memory_rss 持续逼近物理内存上限,异步释放可能跟不上申请速度,反而引发 OOM command not allowed when used memory > 'maxmemory'
  • volatile-* 策略在无过期 key 时会静默退化为 noeviction,7.0 对该行为的日志提示更早、更明确(INFO 命令输出中 evicted_keys 长期为 0 且 rejected_commands 上升,就是退化信号)

allkeys-lru 是缓存场景最可控的选择,但依赖两个前提

很多人误以为设了 allkeys-lru 就万事大吉。实际上它只在以下条件满足时才真正“可预测”:

  • 业务写入后必须有持续访问——否则 LRU 链表无法建立有效热度排序,新写入一批 key 后集体静默(如预热商品页),LRU 会把它们全当成冷数据优先踢掉
  • maxmemory 必须预留至少 20% 物理内存余量,例如服务器有 64GB 内存,maxmemory 不应设超过 50GB;否则内存打满瞬间触发大批量淘汰,CPU 和延迟毛刺明显
  • 禁用 lazyfree-lazy-eviction(即设为 no)——AOF 重写或突发写入期间,同步淘汰比异步更可控,避免后台任务堆积拖慢响应

AOF重写期间内存暴增,不是淘汰策略的问题,而是配置联动失效

BGREWRITEAOF 本身不修改数据,但它 fork 子进程 + 维护 aof_rewrite_buf 缓冲区,会显著拉升 used_memory_rss。此时若 maxmemory 设置偏紧,allkeys-lru 会疯狂淘汰,形成“写入→内存涨→淘汰→CPU 升→延迟高→更多写入重试”的正反馈循环。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 关键修复点不是换策略,而是调低 auto-aof-rewrite-percentage:当 used_memory / maxmemory > 0.7 时,应从默认 100 降至 70 左右,让重写更早、更轻量地触发
  • auto-aof-rewrite-min-size 也要同步下调,SSD 环境建议设为 32mb,避免单次重写处理过多命令
  • 检查 mem_fragmentation_ratio:若长期 > 1.5,说明内存碎片严重,需开启 activedefrag yes,否则 used_memory 看似不高,used_memory_rss 却已逼近上限

真正影响命中率的,常是数据结构和写入模式,不是淘汰策略本身

淘汰策略只是“兜底手段”,而缓存命中率取决于你存什么、怎么存、何时删:

  • 用 HASH 存对象字段,比拆成多个 STRING 键节省 5–10 倍内存;但要配好 hash-max-listpack-entries(建议 512)和 hash-max-listpack-value(建议 64),否则自动转哈希表,内存开销翻倍
  • 避免批量设置相同 TTL:比如所有商品缓存统一设 EX 3600,会导致 volatile-ttl 在整点集中清空,雪崩风险极高;应改用随机偏移,如 EX 3600 + random(0, 600)
  • 冷热分离:用户 session 类数据用 volatile-lru,配置中心类元数据用 noeviction + 单独实例,别混在一个 Redis 里——混合策略会让淘汰行为不可控

淘汰策略选型容易,但让它稳定生效需要看内存水位、AOF节奏、数据结构三者是否咬合。很多线上问题不是策略错了,而是 maxmemory 设得像贴身内衣一样紧,又忘了 aof_rewrite_buf 这个隐形吃内存大户。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

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

相关专题

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

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

2023.11.02

4069

19

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

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

2023.11.14

3555

11

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

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

2024.04.02

6312

6

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

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

2024.04.07

603

6

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

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

2024.04.07

716

6

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

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

2024.04.07

5762

6

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

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

2024.04.07

1120

6

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

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

2024.04.07

936

6

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

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

2024.04.07

5218

6

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习