Spring Boot 连 Redis 集群需配置 spring.redis.cluster.nodes(纯 IP:端口,不可带 redis://)和 max-redirects(推荐3),否则跨槽命令如 MGET 会因重定向失败而抛异常;节点须≥3个且启用 cluster-enabled,密码需统一且不含特殊字符。

Spring Boot 连 Redis 集群,application.yml 里只写 nodes 不够,必须配 max-redirects,否则跨槽(cross-slot)命令会直接报错。
spring.redis.cluster.nodes 必须用 IP+端口,不能带 redis://
常见错误是照搬单机配置习惯,写成 redis://192.168.1.10:6379 —— RedisClusterConfiguration 解析时会失败,抛出 IllegalArgumentException: Invalid host or port。
- 正确写法是纯地址对:
192.168.1.10:6379,192.168.1.11:6379,192.168.1.12:6379 - 节点数建议 ≥ 3(至少 3 主),且必须是集群模式启动的节点(
cluster-enabled yes) - 如果用了 Docker 或云服务,确保宿主机能直连这些 IP:port,防火墙和 SELinux 要放行
不设 max-redirects 就没法执行 MGET、MSET 等跨槽命令
Redis 集群默认禁止跨 slot 操作,但 Spring Data Redis 在遇到 MOVED 或 ASK 重定向响应时,需要主动跳转。这个“最多跳几次”由 max-redirects 控制;不配或设为 0,redisTemplate.opsForValue().multiGet(...) 会直接抛 RedisClusterException: No cluster node for slot。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 推荐值:3~5,
max-redirects: 3足够应对常规故障转移场景 - 该配置必须放在
spring.redis.cluster下级,不是顶层或lettuce下 - 示例完整段落:
spring:
redis:
cluster:
nodes: 192.168.1.10:6379,192.168.1.11:6379,192.168.1.12:6379
max-redirects: 3
密码和超时参数得单独配,不继承自单机逻辑
集群模式下,spring.redis.password 仍生效,但连接池、超时等参数归属更细 —— lettuce 和 jedis 的行为差异明显,尤其在重试和重定向链路上。
-
spring.redis.timeout控制 socket 超时,建议设为 2000(ms)以上,避免因网络抖动被误判失败 - 若用 Lettuce(Spring Boot 2.3+ 默认),
lettuce.pool配置才有效;Jedis 则走jedis.pool(需显式引入jedis依赖) - 集群不支持 AUTH 命令广播,所以所有节点必须用相同密码,且密码不能含逗号、空格等分隔符
跨槽操作失败时,先确认是不是 key 没打上哈希标签
像 MGET k1 k2 k3 失败,不一定是配置问题,而可能是这三个 key 落在不同 slot —— Redis 集群只允许同 slot 的批量操作。解决方式只有两个:
- 强制让 key 落同一 slot:用花括号包住公共前缀,例如
{user1001}:name和{user1001}:age - 改用 pipeline:手动拆成多个单 key 请求,在一个连接里发出去,由客户端合并响应
- 别指望
scan或keys全局匹配,集群里它们只作用于本地 slot,结果不全
真正容易被忽略的是:哪怕 yml 写对了,只要任意一个节点不可达(比如 DNS 解析慢、某节点临时失联),整个 RedisConnectionFactory 初始化就会卡住或失败 —— 建议加 @PostConstruct 简单 ping 测试,而不是等第一个业务请求才暴露问题。


















