在Redis Cluster集群中各分片内存淘汰不均该如何解决

秋伟吖_1181

秋伟吖_1181

2026-10-12

112人浏览

原创

redis集群各节点淘汰不均,本质是maxmemory按节点独立配置且触发条件不一致;需按物理内存比例设maxmemory、启用active defrag、禁用volatile-ttl,并通过evicted_keys和mem_fragmentation_ratio监控真实淘汰行为。

在redis cluster集群中各分片内存淘汰不均该如何解决

Redis Cluster各节点内存淘汰不均,本质不是淘汰策略没生效,而是淘汰触发条件在各节点上不一致——maxmemory 是按节点独立配置的,而 maxmemory-policy 只对本节点超限生效;如果某节点 keys 数少但单 key 极大、或碎片率高导致 used_memory 虚高,它可能早于其他节点触发淘汰,造成“有的节点狂删 key,有的节点还在报 OOM”。

为什么 maxmemory 设相同值反而导致淘汰不均

集群中每个节点物理内存可能不同(比如混用 32G 和 64G 机器),若统一配 maxmemory 20gb,32G 节点实际可用内存余量小,更容易触达淘汰阈值;而 64G 节点即使 used_memory 达到 35GB,只要没超 20GB 配置值,就完全不淘汰。更隐蔽的是:

  • mem_fragmentation_ratio > 1.5 的节点,used_memory 显示值远低于真实物理占用,系统内存压力已高,但 Redis 还没启动淘汰
  • active_defrag_enabled 关闭时,大 key 删除后内存不归还 OS,used_memory 持续虚高,反复触发无效淘汰
  • 某些节点存在大量 volatile-ttl 类 key(如短期 token),到期集中失效,expired_keys 短时飙升,掩盖了真正该淘汰的冷数据

如何让淘汰行为在集群层面更可控

不追求“绝对均匀”,而是让各节点淘汰节奏与真实负载匹配:

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

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

下载
  • 按节点物理内存比例设 maxmemory:32G 节点配 16gb,64G 配 32gb,避免硬写死同一数值
  • 统一启用活性碎片整理:CONFIG SET activedefrag yes + CONFIG SET active-defrag-threshold-lower 10,减少因碎片导致的误淘汰
  • 禁用 volatile-ttl 类策略:它依赖 key 的 TTL 精确性,集群时钟不同步时容易批量过期,改用 allkeys-lfu 或 allkeys-lru,更贴近访问热度
  • 用 INFO stats | grep expired_keys 对比各节点过期键速率,若某节点值异常高(如每秒 500+),说明它承载了大量短生命周期 key,需从业务层打散(例如加随机后缀 token:{uid}:{rand(1,16)})

检查淘汰是否真在发生,而不是被静默跳过

很多团队以为开了 maxmemory-policy 就万事大吉,其实淘汰可能根本没触发:

  • 执行 redis-cli -h node_ip -p port INFO memory,确认 maxmemory > 0 且 used_memory > maxmemory * 0.95 —— 否则淘汰逻辑压根不启动
  • 看 evicted_keys 字段:为 0 说明没淘汰;持续增长才表示策略生效;若它增长但 keyspace_hits 大幅下降,说明淘汰误伤了热 key
  • 注意 mem_allocator:若为 libc(非 jemalloc),内存归还不及时,used_memory 下降慢,会反复触发淘汰

真正难处理的不是淘汰策略本身,而是各节点的 used_memory 统计口径不一致——有的节点刚做过 MEMORY PURGE,有的还在扛着 2.3 的碎片率,这时候强行拉齐 maxmemory 值,只会让负载雪上加霜。

相关文章

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

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

下载

相关标签:

redis redis cluster

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

相关专题

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

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

2023.11.02

4389

19

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

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

2023.11.14

3935

11

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

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

2024.04.02

7192

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

6942

6

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

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

2024.04.07

1160

6

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

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

2024.04.07

1076

6

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

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

2024.04.07

6118

6

热门下载

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

精品课程

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

共0课时 | 0人学习