noauth authentication required错误本质是密码未送达或协议不兼容:yml中password缩进必须与host同级,手动定义lettuceconnectionfactory需显式setpassword(),redis≤5.0时须强制设resp2协议。

“Authentication failed” 在 Spring Boot 集成 Redis 场景下,99% 是 NOAUTH Authentication required 的变体,本质就是密码没送过去、送错了,或者协议/客户端不认这个密码 —— 不是账号密码逻辑错误,而是配置或协议层断连。
application.yml 里配了 password,但没生效
Spring Boot 2.x+ 默认用 Lettuce,spring.redis.password 确实会被读取,但有前提:
- YAML 缩进必须严格:
password必须和host、port同级,且前面是两个空格(不是 tab) - 不能写成
pwd、auth、redis.password等别名 —— 只认spring.redis.password - 如果项目里手动 new 了
LettuceConnectionFactory或JedisConnectionFactory,且没显式 setPassword(),那 yml 配置会被忽略 - 密码含特殊字符(如
@、/、:)时,必须用单引号包裹:password: 'pass@word:123'
Lettuce 连接报 NOAUTH,但 Redis 服务端密码明明是对的
这不是密码错,是协议或版本不匹配。Lettuce 6.0+ 默认启用 RESP3 协议,而 Redis 5.x 及更早版本只支持 RESP2 —— 连接建立后发 AUTH 命令前,协议握手就失败,日志却显示为认证失败。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 检查 Redis 版本:
redis-cli INFO SERVER | grep redis_version - 若 Redis ≤ 5.0,必须强制降级协议:
@Configuration public class RedisClientConfiguration implements LettuceClientConfigurationBuilderCustomizer { @Override public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) { clientConfigurationBuilder.clientOptions( ClientOptions.builder() .protocolVersion(ProtocolVersion.RESP2) .build() ); } } - 不要依赖
spring.redis.lettuce.*配置项来改协议 —— 它们不控制protocolVersion
用了 Jedis,但 password 配置不生效
Jedis 在 Spring Boot 2.0+ 中不是默认客户端,且 spring.redis.password 对 JedisConnectionFactory 的自动装配支持不稳定 —— 尤其在排除了 lettuce-core 后。
- 最稳妥方式是手动构造
JedisConnectionFactory:@Bean public JedisConnectionFactory jedisConnectionFactory() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); config.setHostName("localhost"); config.setPort(6379); config.setPassword(RedisPassword.of("your-pass")); return new JedisConnectionFactory(config); } - 避免混用
spring.redis.jedis.pool.*和spring.redis.password—— Jedis 的 pool 配置项只影响连接池,不参与认证初始化 - 确认没漏掉
redis.clients:jedis依赖,且版本与 Spring Boot 兼容(例如 Spring Boot 3.x 要求 Jedis ≥ 4.0)
Redis 服务端开了密码,但客户端连的是无密码实例
常见于本地开发环境误连了 Docker 容器、远程测试库,或配置 profile 切换出错。
- 启动时加
--debug或开启logging.level.org.springframework.data.redis=DEBUG,看实际连接的 host:port 是多少 - 检查是否激活了错误的 profile:
spring.profiles.active=prod却没配 prod 下的spring.redis.password - Docker 场景下注意网络模式:
host模式下127.0.0.1指容器内 localhost,不是宿主机;要用host.docker.internal(Mac/Win)或自定义 network alias(Linux) - Redis CLI 直连验证:
redis-cli -h your-host -p your-port -a your-pass ping,成功再查应用配置
真正容易被忽略的是:报错提示 “Authentication failed”,但问题可能压根不在认证环节 —— 是协议不兼容导致 AUTH 命令根本没发出去,或是连错实例后对方压根没设密码。先确认连的是哪个 Redis,再查协议,最后才碰密码本身。










