Spring Boot Starter Data Redis使用Lettuce客户端报错:NOAUTH Authentication required

1. 背景

Spring Boot版本升级为:2.6.14
redis依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

redis配置不变,还是带password的:
image.png
项目启动后,获取redis连接时,报错:NOAUTH Authentication required
image.png

2. 问题分析

spring-boot-starer-data-redis支持使用Jedis和Lettuce作为redis客户端,如果配置不指定则默认使用Lettuce。
image.png
不管是Lettuce还是还是Jedis,核心是构建RedisConnectionFactory。
image.png
image.png
不管是Lettuce还是Jedis,都支持单节点、哨兵模式和集群模式的Redis服务端,并且对应的配置都会设置上Password,证明和配置和代码没关系。
image.png
image.png
image.png
所以说,源码和配置都是没问题的,只要配置了密码,就一定会设置到客户端里面。

3. 问题所在

那是什么原因?初步猜测是redis客户端和服务端版本上的一些支持问题。
看看Spring Boot2.6.14的Lettuce版本基本是保持在比较新的了:
image.png
再看看我们的redis服务端的版本:
我的天,现在redis都出到6了吧。。
image.png
现在这么一看,最快的解决方法应该是降级Lettuce。
我们试试降级到5.x
image.png
项目启动,这次不是认证问题,而是找不到一些常量,此版本的spring-boot-starter-data-redis和5.x的Lettuce并不兼容,所以说,不能只是降低Lettuce版本,要不就直接降低spring-boot-starter-data-redis的版本,但是既然升级到新版本的SpringBoot,肯定就是想使用新的特性和支持,不可能又单独将某个组件降级回去吧。。
image.png
没啥头绪,直接到官网看看Lettuce的版本介绍吧。
看了最近几个版本的介绍,有和Redis版本直接相关的是Lettuce6.0,其中介绍支持Redis6的RESP3协议。
image.png
到源码里面搜,还真的搜出点东西:
意思是说,到Lettuce6.0后,将使用RESP3协议,而RESP3协议是Redis6.0才支持的,那么我们的Redis服务端版本才2.8.x,肯定是废掉的了。
image.png
所以解决方法基本还是围绕Lettuce的版本解决,要不就是将spring-boot-starter-redis进行降级(不考虑),将对应的Lettuce版本也降到5.2以下,要不就是将RESP3协议改为使用RESP2协议。
那我们肯定是选择后者的,因为Lettuce6.0版本也提到,同时支持RESP2和RESP3。
至于怎么修改RESP协议,这里直接上代码。
image.png
项目启动成功,并操作Redis成功:
image.png

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值