news 2026/5/22 18:48:20

Redis和 Redisson 集成踩坑日记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis和 Redisson 集成踩坑日记

异常报错

报错信息:关键报错:ERR Client sent AUTH, but no password is set

Redis和 Redisson 集成,如果 Redis 没有设置密码,必须注释掉,不然Redisson就会主动发起验证

spring: redis: host: 127.0.0.1 port: 6379 # password: # ← 这行必须删除或注释 database: 0

根本解决办法

详细报错:

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 命令(即要求密码认证)。这是典型的配置不匹配问题。

🔍 错误核心原因

ERR Client sent AUTH, but no password is set.
  • Redis 服务器:未配置密码(requirepass未设置)
  • Redisson 客户端:配置了password(在application.yml中指定了密码)

✅ 解决方案(2 种方式)

⚙️ 方式 1:移除客户端密码配置(推荐,最简单)

这是最可能的解决方案,因为你的 Redis 服务没有设置密码。

  1. 打开application.yml(或application.properties

  2. 删除或注释掉

    spring.redis.password

    配置:

    spring: redis: host: 127.0.0.1 port: 6379 # password: your_password # ← 删除或注释掉这一行! database: 0
⚙️ 方式 2:在 Redis 中设置密码(如果需要密码)

如果确实需要密码认证,请同时修改 Redis 配置和客户端配置

  1. 修改 Redis 配置

    redis.windows.conf
    # 取消注释并设置密码(示例密码:123456) requirepass 123456
  2. 同步修改客户端配置

    application.yml
    spring: redis: password: 123456 # 必须与 Redis 配置的密码一致
  3. 重启 Redis 服务(关键!)

    # 先停止当前 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(移除密码配置),因为:

  1. 你之前能用redis-cli ping成功连接,说明 Redis 没有密码
  2. 配置简单,无需修改 Redis 服务
  3. 避免因密码不一致导致的其他连接问题

正确配置示例(无密码):

spring: 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:\RedisC:\Program Files\Redis),执行以下命令:

方法 A:使用服务命令启动(推荐)

如果你之前已经安装过 Redis 为 Windows 服务:

# 启动服务 net start redis

如果提示“系统错误”,请尝试使用方法 B。

方法 B:命令行直接启动(调试用)

这种方式会占用一个 CMD 窗口,关闭窗口服务即停止,适合用来查看启动日志。

# 进入 Redis 目录后执行(假设配置文件名为 redis.windows.conf) redis-server.exe redis.windows.conf
  • 注意:如果双击redis-server.exe会瞬间闪退,必须通过命令行运行才能看到报错信息。

2. 验证 Redis 是否正常工作

在启动服务的窗口保持打开的状态下,重新打开一个新的 CMD 窗口,进入 Redis 目录,执行:

redis-cli.exe

进入交互模式后,输入:

ping
  • 如果返回PONG:说明 Redis 服务端已经正常启动,问题可能出在你的 Spring Boot 项目的配置(如密码、端口不一致)。
  • 如果报错:说明服务端本身有问题,需要根据 CMD 的报错信息修复 Redis。

3. 检查配置文件 (redis.windows.conf)

在 Windows 的 Redis 安装目录下,找到redis.windows.conf文件,检查以下几项配置:

  1. 端口检查:
    确保port 6379没有被注释(前面没有#),且没有被修改为其他端口。

  2. 保护模式 (关键):

    如果你是远程连接或者遇到连接拒绝,找到

    protected-mode

    这一行:

    protected-mode no

    建议在开发环境下将其设置为no,或者确保你配置了密码。

  3. 绑定 IP:

    如果你只想本地连接,确保有这一行(默认通常都有):

    bind 127.0.0.1

4.密码设置:

如果你设置了密码,请找到

requirepass

并取消注释:

requirepass yourpassword

如果设置了密码,记得在 Spring Boot 的application.yml中配置相同的密码。

总结流程图

  1. 去 Redis 安装目录。
  2. 运行redis-server.exe redis.windows.conf(看有没有报错)。
  3. 新开窗口运行redis-cli ping(看是否返回 PONG)。
  4. 如果第 3 步成功,再启动你的 Spring Boot 项目。

如果前面3 步都成功了,还是报错

报错信息:

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 服务端的连接握手环节。ExecutionExceptionRedisConnectionException通常意味着网络可达性问题或协议/认证不匹配。

请按照以下高级排查方案进行检查:

1. 检查redisson.yaml配置文件(关键)

你使用了 Redisson,它支持独立的配置文件。如果项目中存在redisson.yamlredisson.json,它会覆盖application.yml中的配置。

  • 检查点:resources目录下找找有没有redisson.yaml
  • 问题:里面可能配置了错误的 IP、端口,或者配置的是集群模式(clusterServersConfig),但你本地运行的是单机版(singleServerConfig)。
  • 解决:如果不需要复杂配置,暂时删除或重命名redisson.yaml,让 Spring Boot 使用默认的自动配置。

2. Windows 防火墙拦截(极易被忽视)

虽然localhost是本机回环,但在某些 Windows 网络配置或安全策略下,防火墙可能会拦截 Java 进程与 Redis 进程的通信。

  • 操作:暂时关闭 Windows 防火墙,或者在防火墙的“入站规则”中,添加redis-server.exejava.exe为允许。
  • 验证:关闭防火墙后重启 Spring Boot 项目,看是否报错消失。

3. IP 地址解析问题

虽然你配置的是127.0.0.1,但日志里显示的是localhost/127.0.0.1。有时 Java 或 Netty(Redisson 的网络层)在解析localhost时可能会尝试 IPv6 或者解析失败。

  • 解决:

    强制使用 IP。

    application.yml

    中,不要写

    localhost

    明确写成:

    spring: 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 中运行:

    netstat -ano | findstr :6379
  • 检查:如果看到状态是LISTENING,记下 PID。如果这个 PID 不是你刚刚启动的redis-server的 PID,说明端口被其他程序占用了。你需要结束那个进程,或者修改 Redis 的端口。

6. Spring Boot 版本与 Redisson 版本不兼容

如果你的 Spring Boot 版本较新(如 3.x),而 Redisson 版本较老,可能会出现序列化或驱动层面的冲突。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 18:47:15

卡梅德生物技术快报|慢病毒质粒包装标准化流程与难转染细胞感染实践

在细胞与基因工程开发中,慢病毒质粒包装是实现外源基因高效递送、稳定表达的关键技术。针对马胚胎成纤维细胞等难转染原代细胞,传统方案存在效率低、稳定性差等痛点。本期卡梅德生物技术快报基于实验优化,输出慢病毒质粒包装标准化流程&#…

作者头像 李华
网站建设 2026/4/1 16:24:38

解锁5大跨平台无线控制能力:QtScrcpy全方位使用指南

解锁5大跨平台无线控制能力:QtScrcpy全方位使用指南 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …

作者头像 李华
网站建设 2026/4/7 5:44:25

ruoyi-vue-pro源码部署实战:如何选择稳定版本并快速搭建开发环境

RuoYi-Vue-Pro 稳定版部署指南:从版本选择到开发环境搭建全解析 第一次接触 RuoYi-Vue-Pro 这个 Java 快速开发框架时,我像大多数开发者一样直接克隆了 master 分支,结果编译阶段就遭遇了各种依赖冲突和接口报错。后来才发现,这个…

作者头像 李华
网站建设 2026/4/5 21:23:45

深入探讨Keras中的自定义损失函数

引言 在使用Keras构建深度学习模型时,灵活地定义损失函数是十分常见的需求。然而,当我们尝试使用自定义损失函数时,常常会遇到各种问题,比如形状不匹配。本文将通过一个实际案例,详细探讨如何正确定义并使用自定义损失函数,避免常见的错误。 问题背景 假设我们有一个分…

作者头像 李华
网站建设 2026/4/4 19:26:24

用ZYNQ PS-SPI给Flash测个速:华邦W25Q80在25MHz时钟下的真实读写性能报告

ZYNQ PS-SPI Flash性能深度评测:华邦W25Q80在25MHz时钟下的极限挖掘 当我们需要在嵌入式系统中选择一款Flash存储器时,数据手册上的理论参数往往无法反映真实应用场景下的性能表现。本文将基于Xilinx ZYNQ平台的PS-SPI接口,对华邦W25Q80 Flas…

作者头像 李华