异常报错
报错信息:关键报错:ERR Client sent AUTH, but no password is set
Redis和 Redisson 集成,如果 Redis 没有设置密码,必须注释掉,不然Redisson就会主动发起验证
yaml
spring:
redis:
host: 127.0.0.1
port: 6379
# password: # ← 这行必须删除或注释
database: 0
根本解决办法
详细报错:
java
org.redisson.client.RedisException: ERR Client sent AUTH, but no password is set. channel: [id: 0xb67a741f, L:/127.0.0.1:64404 - R:127.0.0.1/127.0.0.1:6379] command: (AUTH), params: (password masked)
at java.base/java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:368)
at java.base/java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:377)
at java.base/java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:1097)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2162)
at org.redisson.client.protocol.CommandData.tryFailure(CommandData.java:87)
at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:422)
这个错误信息非常明确:Redis 服务器没有设置密码,但客户端(Redisson)却尝试发送 AUTH 命令(即要求密码认证)。这是典型的配置不匹配问题。
🔍 错误核心原因
text
ERR Client sent AUTH, but no password is set.
- Redis 服务器 :未配置密码(
requirepass未设置) - Redisson 客户端 :配置了
password(在application.yml中指定了密码)
✅ 解决方案(2 种方式)
⚙️ 方式 1:移除客户端密码配置(推荐,最简单)
这是最可能的解决方案,因为你的 Redis 服务没有设置密码。
-
打开
application.yml(或application.properties) -
删除或注释掉
spring.redis.password配置:
yamlspring: redis: host: 127.0.0.1 port: 6379 # password: your_password # ← 删除或注释掉这一行! database: 0
⚙️ 方式 2:在 Redis 中设置密码(如果需要密码)
如果确实需要密码认证,请同时修改 Redis 配置和客户端配置:
-
修改 Redis 配置
redis.windows.confconf# 取消注释并设置密码(示例密码:123456) requirepass 123456 -
同步修改客户端配置
application.ymlyamlspring: redis: password: 123456 # 必须与 Redis 配置的密码一致 -
重启 Redis 服务(关键!)
cmd# 先停止当前 Redis taskkill /f /im redis-server.exe # 重新启动 Redis(带新配置) redis-server.exe redis.windows.conf
🛠️ 为什么会出现这个问题?
| 配置项 | Redis 服务 | Spring Boot 客户端 | 状态 |
|---|---|---|---|
requirepass |
未设置(默认无密码) | 设置了 password: abc |
❌ 不匹配 |
requirepass |
设置了 123456 |
未设置 password |
❌ 不匹配 |
requirepass |
未设置 | 未设置 password |
✅ 匹配 |
💡 关键点 :Redis 服务没有密码 ,但客户端错误地配置了密码 ,导致 Redis 报错
ERR Client sent AUTH, but no password is set.
📌 最终建议
优先使用方式 1(移除密码配置),因为:
- 你之前能用
redis-cli ping成功连接,说明 Redis 没有密码 - 配置简单,无需修改 Redis 服务
- 避免因密码不一致导致的其他连接问题
✅ 正确配置示例(无密码):
yamlspring: redis: host: 127.0.0.1 port: 6379 # password: # ← 这行必须删除或注释 database: 0
💡 为什么之前没报错?
你之前启动时可能没有配置密码 ,但 RedissonAutoConfiguration 会尝试连接时默认不带密码 。
当你的 application.yml 错误地配置了密码 后,Redisson 就会发送 AUTH 命令,触发这个错误。
✨ 总结 :删除
spring.redis.password配置,问题即可解决!
其他问题排查:验证Redis 是否正常启动
1. 启动 Redis 服务(最常见原因)
在 Windows 上,Redis 通常是以服务形式运行,或者通过命令行启动。请检查任务管理器中是否有 redis-server.exe 进程。
如果没有,请打开 CMD(命令提示符) 或 PowerShell ,进入你的 Redis 安装目录(例如 D:\Redis 或 C:\Program Files\Redis),执行以下命令:
方法 A:使用服务命令启动(推荐)
如果你之前已经安装过 Redis 为 Windows 服务:
cmd
# 启动服务
net start redis
如果提示"系统错误",请尝试使用方法 B。
方法 B:命令行直接启动(调试用)
这种方式会占用一个 CMD 窗口,关闭窗口服务即停止,适合用来查看启动日志。
cmd
# 进入 Redis 目录后执行(假设配置文件名为 redis.windows.conf)
redis-server.exe redis.windows.conf
- 注意: 如果双击
redis-server.exe会瞬间闪退,必须通过命令行运行才能看到报错信息。
2. 验证 Redis 是否正常工作
在启动服务的窗口保持打开的状态下,重新打开一个新的 CMD 窗口,进入 Redis 目录,执行:
cmd
redis-cli.exe
进入交互模式后,输入:
bash
ping
- 如果返回
PONG:说明 Redis 服务端已经正常启动,问题可能出在你的 Spring Boot 项目的配置(如密码、端口不一致)。 - 如果报错:说明服务端本身有问题,需要根据 CMD 的报错信息修复 Redis。
3. 检查配置文件 (redis.windows.conf)
在 Windows 的 Redis 安装目录下,找到 redis.windows.conf 文件,检查以下几项配置:
-
端口检查:
确保
port 6379没有被注释(前面没有#),且没有被修改为其他端口。 -
保护模式 (关键):
如果你是远程连接或者遇到连接拒绝,找到
protected-mode这一行:
confprotected-mode no建议在开发环境下将其设置为
no,或者确保你配置了密码。 -
绑定 IP:
如果你只想本地连接,确保有这一行(默认通常都有):
confbind 127.0.0.1
4.密码设置:
如果你设置了密码,请找到
requirepass
并取消注释:
conf
requirepass yourpassword
如果设置了密码,记得在 Spring Boot 的 application.yml 中配置相同的密码。
总结流程图
- 去 Redis 安装目录。
- 运行
redis-server.exe redis.windows.conf(看有没有报错)。 - 新开窗口运行
redis-cli ping(看是否返回 PONG)。 - 如果第 3 步成功,再启动你的 Spring Boot 项目。
如果前面3 步都成功了,还是报错
报错信息:
java
Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redisson' threw exception with message: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
... 131 common frames omitted
Caused by: org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379
at org.redisson.connection.MasterSlaveConnectionManager.doConnect(MasterSlaveConnectionManager.java:228)
at org.redisson.connection.MasterSlaveConnectionManager.connect(MasterSlaveConnectionManager.java:188)
at org.redisson.connection.ConnectionManager.create(ConnectionManager.java:98)
排除报错方案二
既然你已经确认在 Windows 命令行中 redis-server 能启动,且 redis-cli ping 能返回 PONG,说明 Redis 服务端本身是健康的。
问题出在 Spring Boot 应用(Redisson 客户端) 与 Redis 服务端 的连接握手环节。ExecutionException 和 RedisConnectionException 通常意味着网络可达性问题或协议/认证不匹配。
请按照以下高级排查方案进行检查:
1. 检查 redisson.yaml 配置文件(关键)
你使用了 Redisson,它支持独立的配置文件。如果项目中存在 redisson.yaml 或 redisson.json,它会覆盖 application.yml 中的配置。
- 检查点: 在
resources目录下找找有没有redisson.yaml。 - 问题: 里面可能配置了错误的 IP、端口,或者配置的是集群模式(
clusterServersConfig),但你本地运行的是单机版(singleServerConfig)。 - 解决: 如果不需要复杂配置,暂时删除或重命名
redisson.yaml,让 Spring Boot 使用默认的自动配置。
2. Windows 防火墙拦截(极易被忽视)
虽然 localhost 是本机回环,但在某些 Windows 网络配置或安全策略下,防火墙可能会拦截 Java 进程与 Redis 进程的通信。
- 操作: 暂时关闭 Windows 防火墙,或者在防火墙的"入站规则"中,添加
redis-server.exe和java.exe为允许。 - 验证: 关闭防火墙后重启 Spring Boot 项目,看是否报错消失。
3. IP 地址解析问题
虽然你配置的是 127.0.0.1,但日志里显示的是 localhost/127.0.0.1。有时 Java 或 Netty(Redisson 的网络层)在解析 localhost 时可能会尝试 IPv6 或者解析失败。
-
解决:
强制使用 IP。
在
application.yml中,不要写
localhost明确写成:
yamlspring: redis: host: 127.0.0.1 port: 6379
4. 密码认证不匹配(Silent Fail)
如果 Redis 设置了密码,但客户端没配,或者客户端配了但 Redis 没设,有时候会表现为"连接失败"而不是"认证失败"。
-
检查 Redis 配置:
打开
redis.windows.conf搜索
requirepass- 如果有值(例如
requirepass 123456),确保application.yml中的spring.redis.password填写正确。 - 如果没有值(注释状态),确保
application.yml中不要 配置password,或者将其留空。
- 如果有值(例如
5. 端口被占用或冲突
虽然 redis-cli ping 能通,但可能有多个 Redis 实例在竞争。
-
操作:
在 CMD 中运行:
cmdnetstat -ano | findstr :6379 -
检查: 如果看到状态是
LISTENING,记下 PID。如果这个 PID 不是你刚刚启动的redis-server的 PID,说明端口被其他程序占用了。你需要结束那个进程,或者修改 Redis 的端口。
6. Spring Boot 版本与 Redisson 版本不兼容
如果你的 Spring Boot 版本较新(如 3.x),而 Redisson 版本较老,可能会出现序列化或驱动层面的冲突。
- 建议: 检查
pom.xml或build.gradle。 - 解决: 尝试升级 Redisson 到最新版本,或者使用 Spring Boot 官方推荐的版本组合。