spring boot中redis密码配置需按模式区分:单机用spring.redis.password,集群必须用spring.redis.cluster.password,哨兵模式则需同时配置spring.redis.password(主从)和spring.redis.sentinel.password(哨兵节点)。

Spring Boot 中 Redis 密码配置不能一概而论:单机模式用 spring.redis.password,集群模式必须用 spring.redis.cluster.password;哨兵模式则优先走 spring.redis.password,但若哨兵节点本身有密码,还需额外配 spring.redis.sentinel.password。
单机模式下 password 配置生效的条件
单机模式只认 spring.redis.password,且它会同时作用于连接认证和命令执行。如果 Redis 服务启用了 requirepass 但配置项写错位置(比如误写成 spring.redis.lettuce.password),启动时不会报错,但后续所有操作都会返回 NOAUTH Authentication required 错误。
常见错误现象:
redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required- 应用能连上 Redis,但
set/get全部失败
正确配置示例(application.yml):
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
spring:
redis:
host: 127.0.0.1
port: 6379
password: mysecret123
database: 0
timeout: 5000
注意:password 必须和 redis.conf 中的 requirepass 值完全一致,区分大小写,且不能带空格。
集群模式必须用 cluster.password
集群模式下,spring.redis.password 被 Spring Boot 完全忽略——这是最容易踩的坑。Lettuce 集群客户端只读取 spring.redis.cluster.password,并将其透传给每个节点用于 AUTH 认证。
如果你只配了 spring.redis.password,启动不报错,但首次执行命令时会抛出 redis.clients.io.netty.handler.timeout.ReadTimeoutException 或 RedisCommandExecutionException: NOAUTH,因为节点拒绝未认证连接。
正确配置示例(application.yml):
spring:
redis:
cluster:
nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
password: myclusterpass
max-redirects: 3
补充说明:
-
cluster.password是 Spring Boot 2.0+ 的标准配置项,低版本需手动构造LettuceConnectionFactory - 集群各节点密码必须完全一致,否则部分节点认证失败会导致重定向异常
- 不支持为不同节点设置不同密码
哨兵模式的密码分两层:主从节点 + 哨兵节点
哨兵模式涉及两类密码:Redis 实例(主/从)的访问密码,以及哨兵服务自身的连接密码(如果哨兵启用了 requirepass)。
Redis 主从实例密码走 spring.redis.password;哨兵节点密码必须单独配 spring.redis.sentinel.password,否则初始化连接哨兵时就会失败,报错类似 ERR invalid password 或连接超时。
典型配置(application.yml):
spring:
redis:
sentinel:
master: mymaster
nodes: 127.0.0.1:26379,127.0.0.1:26380
password: sentinel123 # ← 哨兵服务自己的密码
password: redis123 # ← Redis 主从实例的密码
database: 0
验证要点:
- 先用
redis-cli -p 26379 -a sentinel123手动连哨兵,确认能否执行SENTINEL masters - 再用
redis-cli -p 6379 -a redis123连主节点,确认INFO replication正常
密码为空时的显式声明很重要
当 Redis 没设密码,但配置项留空或缺失,某些旧版 Lettuce 会尝试发送空字符串 AUTH 命令,导致 ERR Client sent AUTH, but no password is set。稳妥做法是显式设为 null 或空字符串:
spring:
redis:
password: "" # ← 显式空字符串,比不写更安全
集群模式同理:
spring:
redis:
cluster:
password: ""
这个细节在多环境切换(如 dev 无密、prod 有密)时极易被忽略,结果测试环境跑得好好的,上线就挂。










