Redis集群中CONFIG SET maxmemory-policy对其他节点无效,因其仅作用于当前连接节点;需逐个主从节点单独执行CONFIG SET或修改redis.conf并重启,否则策略不生效。

不能“统一修改”——Redis集群中每个节点必须单独配置淘汰策略。集群模式下没有中心控制节点,CONFIG SET 命令只作用于当前连接的节点,不存在广播式或批量同步配置的能力。
为什么 CONFIG SET maxmemory-policy 对集群无效
Redis集群不提供跨节点的配置同步机制。即使你用 redis-cli -c 连上集群任意节点执行 CONFIG SET maxmemory-policy allkeys-lru,该命令仅影响该节点;其他分片完全不受影响,仍沿用各自原有的策略(通常是默认的 noeviction)。
- 集群拓扑是去中心化的,节点间只同步数据和槽位映射,不共享运行时配置
-
CONFIG SET是普通 Redis 命令,不是集群协议的一部分,不会被转发或广播 - 若某节点未设
maxmemory,则其maxmemory-policy实际不生效(无论配了什么)
必须逐个节点执行 CONFIG SET(含 maxmemory)
要让所有分片真正启用淘汰,需对每个主节点(以及从节点,如果它可能升主)分别设置 maxmemory 和 maxmemory-policy:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 先确认每个节点的地址和端口(如
10.0.1.10:7001,10.0.1.10:7002…) - 对每个节点运行两行命令(顺序不能反):
redis-cli -h 10.0.1.10 -p 7001 CONFIG SET maxmemory 2gb<br>redis-cli -h 10.0.1.10 -p 7001 CONFIG SET maxmemory-policy allkeys-lru
- 检查是否生效:
redis-cli -h 10.0.1.10 -p 7001 CONFIG GET maxmemory-policy - 注意:从节点也建议同样配置,避免故障转移后新主节点无淘汰能力
生产环境更推荐改 redis.conf 并重启
临时用 CONFIG SET 配置在节点重启后即丢失,且容易漏配。线上集群应坚持配置文件驱动:
- 在每台物理机/容器的
redis.conf中取消注释并设置:maxmemory 2gb<br>maxmemory-policy allkeys-lru
- 同时确保
maxmemory-samples合理(如设为10,提升 LRU 近似精度) - 滚动重启节点(每次只重启一个主节点及其从节点,避免槽不可用)
- 重启后验证:
redis-cli -c -h cluster-host -p 6379 CLUSTER NODES确认各节点角色与状态
最容易被忽略的一点:集群中不同节点内存压力差异极大——热点 key 集中在某个分片时,只有那个节点会频繁淘汰,其他节点内存可能长期闲置。所以光配策略不够,得配合 redis-cli --bigkeys 和 MEMORY USAGE 定期检查 key 分布,否则单靠统一策略解决不了负载不均问题。

















