spring.redis.sentinel.master必须与sentinel.conf中sentinel monitor定义的master名称完全一致(如mymaster),大小写敏感且不可含空格;spring.redis.sentinel.nodes须为应用可直连的哨兵IP:端口列表,禁用localhost/127.0.0.1,多个节点用英文逗号分隔、无空格。

spring.redis.sentinel.master 必须和哨兵实际监控的 master 名称完全一致
填错这个值,应用启动不报错,但运行时会连不上主节点,表现为超时或 Cannot connect to sentinel 类错误。它不是你随便起的名字,而是你在 sentinel.conf 里用 sentinel monitor 定义的那个标识符:
sentinel monitor mymaster 192.168.43.243 6379 2
上面这行里的 mymaster 就是必须填进配置的值。常见踩坑点包括:
- 大小写不一致(比如填成
Mymaster或MYMASTER) - YAML 缩进里混入全角空格或不可见字符(尤其复制粘贴后)
- 与哨兵日志中实际打印的
+monitor事件不匹配(可用redis-cli -p 26379 sentinel masters实时查)
spring.redis.sentinel.nodes 必须是应用能直连的哨兵地址列表
Spring Boot 启动后,会挨个向这些地址发起 TCP 连接,获取当前主节点信息。填了 localhost 或 127.0.0.1 是最常见的失败原因——应用部署在远程服务器,却试图连本地哨兵进程,而本地根本没跑。
正确写法(YAML 格式):
spring:
redis:
sentinel:
master: mymaster
nodes: 192.168.43.243:26379,192.168.43.244:26379,192.168.43.245:26379
注意:
- 多个地址用英文逗号分隔,前后不能有空格(
192.168.1.1:26379 , 192.168.1.2:26379会解析失败) - Docker 环境下,确认宿主机网络模式、端口映射是否生效;K8s 中要填 Service ClusterIP 或 NodePort 地址,不是 Pod IP
- 地址必须是应用服务器能
telnet通的 IP + 端口
依赖和自动配置机制依赖 Lettuce 或 Jedis,但无需手动配连接工厂
Spring Boot 2.0+ 默认使用 Lettuce,只要引入 spring-boot-starter-data-redis,再配上 spring.redis.sentinel.master 和 spring.redis.sentinel.nodes,就会自动初始化 RedisSentinelConfiguration 并构建高可用连接工厂。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
不需要额外写 @Bean RedisConnectionFactory 配置类——除非你要调优连接池参数(如 spring.redis.lettuce.pool.max-active)或切换客户端(比如强制用 Jedis)。
如果用了 Jedis,需显式加依赖:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
密码配置容易遗漏:哨兵和 Redis 主节点都要设 auth-pass
如果 Redis 主节点设置了密码(requirepass),哨兵配置里必须同步设置 sentinel auth-pass,否则哨兵无法认证访问主节点,故障转移会失败。
sentinel.conf 示例片段:
sentinel monitor mymaster 192.168.43.243 6379 2 sentinel auth-pass mymaster redispwd
Spring Boot 应用侧不需要额外配密码字段——Lettuce/Jedis 会从哨兵返回的主节点地址中自动提取并带上认证。但前提是哨兵自己能连上带密码的主节点。
验证方式:登录任意哨兵节点执行 sentinel masters,看输出中 ip、port、flags 是否正常,且 auth-pass 字段已生效。

















