springboot连接Redis报NOAUTH Authentication required
·
背景
项目接入redis,连接报错NOAUTH Authentication required,百度后是没有输入密码,但是在测试环境是正常的。修改多次密码失效,直接使用redis-cli连接,也是只有没输入密码时才会报这个错,密码错误是另一个提示。那应该和redis版本和redis客户端有关

根因
redis 3.0版本仅支持RESP2的通信协议,而Lettuce 6.x版本开始,使用RESP3(Redis 6.x引入)的HELLO命令进行版本自适应判断,但是对于不支持HELLO命令的低版本实例,兼容性存在一定问题。刚好springboot版本默认的引入的redis客户端是lettuce 6.x ,协议不通。
修改方案
升级redis到6.0以上
保持环境一致,暂不考虑,因为redis升级只是新增命令,其实风险比较小。
lettuce使用RESP 2协议
package com.chinaroad.parking.config;
import io.lettuce.core.ClientOptions;
import io.lettuce.core.protocol.ProtocolVersion;
import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
@Configuration
public class SpringConfig implements LettuceClientConfigurationBuilderCustomizer {
@Override
public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) {
// manually specifying RESP2
clientConfigurationBuilder.clientOptions(ClientOptions.builder()
.protocolVersion(ProtocolVersion.RESP2)
.build());
}
}
切换jedis客户端
- 引入jedis客户端(版本统一被springboot管理了,所以不用指定版本),排除lettuce
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 增加jedis依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
- 引入jedis客户端,不排除lettuce,切换jedis客户端
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
application.propertis
spring.redis.client-type=jedis
对于体积来说还是去除lettuce好点。
tip
如何测试redis是否支持RESP3版本
连接redis后,直接发起命令,如果返回了版本号,说明支持
HELLO 3
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)