redis NOAUTH Authentication required 可能不是密码问题

  1. 开发环境

    springboot 2.4.3
    spring-boot-starter-data-redis 2.4.3
    redis 4.0
    lettuce 6.0.2

  2. 背景

    多环境(test,pre,prd)部署,在测试环境测试通过之后部署预发环境的时候,服务一直报错,提示【io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.】,这个提示一般情况下的意思是:redis服务配置了密码,客户端链接的时候没有填写密码。但是代码和测试环境同一套的,在测试环境都正常测试通过了的。

    连接使用Redis后报错

    java.util.concurrent.CompletionException: io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292)
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
    at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:943)
    at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:926)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1977)
    at io.lettuce.core.RedisHandshake.lambda$tryHandshakeResp3$1(RedisHandshake.java:105)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1977)
    at io.lettuce.core.protocol.AsyncCommand.doCompleteExceptionally(AsyncCommand.java:139)
    at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120)
    at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111)
    at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:720)
    at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:655)
    at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:572)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    

    原因分析:
    springboot简单整合redis,用的是lettuce客户端,提示没有授权,密码是对的,命令行验证过。所以,不应该是代码问题。也debug验证过,代码可以获取到密码配置项。
    所以,应该是客户端问题版本问题,去官网搜一下issue,发现有人已经反馈过了。
    通过抓包发现lettuce 6.x默认使用RESP3协议请求云服务器redis服务4.x,导致不支持。后续验证了官方的redis4.0.11是支持的。因为云服务器返回的不是RESP3协议不支持而是验证失败。Lettuce 6 尝试自动发现协议
    Lettuce 6.x版本开始,使用RESP3(Redis 6.x引入)的HELLO命令进行版本自适应判断,但是对于不支持HELLO命令(使用hello命令判断是否能够连接redis)的低版本实例,兼容性存在一定问题。
    所以对于低版本的实例,建议直接在Lettuce中指定使用RESP2协议(兼容Redis 4/5)的版本来使用。
    这个地方还需要特殊提到另一个情况,因为我们经常使用到的是云服务,各大云厂商对redis进行了魔改,因此即使是高版本的redis也存在leetuce 6.x无法连接使用。
    根据上述,就必须降级lettuce或者指定redis版本或其它方式手动解决解决这个问题

  3. 解决方案

    3.1 看了lettuce官网的release貌似还没解决这个问题,所以降级一下lettuce版本到5.3.7,问题解决了。
    <!-- redis --><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><dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>5.3.7.RELEASE</version><scope>compile</scope></dependency><!-- 要用redis连接池 必须有pool依赖--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.5.0</version></dependency>
    
    3.2 通过指定redis的协议来进行处理
    RedisClient redisClient = RedisClient.create(RedisURI.Builder.redis("x.x.x.x",6379).withPassword("laosiji123".toCharArray()).withDatabase(6).build());
    redisClient.setOptions(ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).build());
    
    3.3 这是 Spring Boot 的最佳实践,也是通过指定协议来处理
    @Configuration
    public class SpringConfig implements LettuceClientConfigurationBuilderCustomizer {@Override
    public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) {
    // manually specifying RESP2
    clientConfigurationBuilder.clientOptions(ClientOptions.builder()
    .protocolVersion(ProtocolVersion.RESP2)
    .build());
    }}
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划题目

真的学不会dp啊啊啊啊嗷嗷嗷嗷嗷彻底疯狂彻底疯狂&#xff0c;只能祈祷量变引起质变 哭 1. cf E. Fixed Points 主要是不会设状态嘛 第一维枚举i个数&#xff0c;第二维枚举删了几个数(删到最后还剩几个数) dp[i][j] : 代表i个数删到仅剩j个数后的最大匹配个数。然后考虑第…

arcgis更改图层字段名脚本

话不多说&#xff0c;上脚本源码&#xff0c;复制黏贴即可 #-*- coding:utf-8 -*- __author__ lumen import arcpy #输入图层 InputFeature arcpy.GetParameterAsText(0) #原始字段 oldField arcpy.GetParameterAsText(1) # 获取原始字段类型 oldFieldType desc arcpy.…

python人工智能可以干什么,python人工智能能干什么

大家好&#xff0c;给大家分享一下python做人工智能需要什么水平&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 人工智能包含常用机器学习和深度学习两个很重要的模块&#xff0c;而python拥有matplotlib、Numpy、sklearn、keras等大量的…

Linux Linux系统上C程序的编译与调试

一、环境配置 在Linux操作系统中&#xff0c;打开终端&#xff0c;以管理员root模式登录 1.更新&#xff1a;输入命令apt update 2.下载vim&#xff1a;输入命令apt install vim -y 3.下载gcc&#xff1a;输入命令apt install gcc -y 4.下载g&#xff1a;输入命令apt install …

Blazor简单教程(0):课程安排

文章目录 前言课程安排大致安排 前言 为了打发一下业余时间和普及Blazor&#xff0c;我开设Blazor简单教程 Tips:Blazor是真的找不到工作&#xff01;我自己BOSS直聘上面找了半天&#xff0c;C#国内主流市场还是以Winfrom为主。 课程安排大致安排 Blazor简单介绍Visual Stu…

VR内容研发公司 | VR流感病毒实验虚拟现实课件

由广州华锐互动开发的《VR流感病毒实验虚拟现实课件》是一种新型的教学模式&#xff0c;可以为学生提供更加真实和直观的流感病毒分离鉴定实验操作体验&#xff0c;从而提高学生的实验技能和工作效率。 《VR流感病毒实验虚拟现实课件》涉及了生物安全二级实验室(BSL-2)和流感病…

ElasticSearch:项目实战(2)

ElasticSearch: 项目实战 (1) 需求&#xff1a; 新增文章审核通过后同步数据到es索引库 1、文章服务中添加消息发送方法 在service层文章新增成功后&#xff0c;将数据通过kafka消息同步发送到搜索服务 Autowiredprivate KafkaTemplate<String,String> kafkaTemplate;/…

Java整合Selenium录制视频

捕捉视频 有时候我们未必能够分析故障只需用日志文件或截图的帮助。有时捕获完整的执行视频帮助。让我们了解如何捕捉视频。 我们将利用Monte媒体库的执行相同。 配置 第1步&#xff1a;导航到URL下载屏幕记录JAR&#xff0c;如下图所示。 http://www.randelshofer.ch/monte…

linux环形缓冲区kfifo实践3:IO多路复用poll和select

基础知识 poll和select方法在Linux用户空间的API接口函数定义如下。 int poll(struct pollfd *fds, nfds_t nfds, int timeout); poll()函数的第一个参数fds是要监听的文件描述符集合&#xff0c;类型为指向struct pollfd的指针。struct pollfd数据结构定义如下。 struct poll…

django 优化方式

前言 对于网站和Web APP来说&#xff0c;相同的类型的产品&#xff0c;响应速度越好&#xff0c;那么用户量就越高。不可否认的是&#xff0c;响应速度是用户黏粘性最好的方式之一&#xff0c;但往往不知道如何下手解决&#xff0c;希望这篇文章可以给予你一些思路 对于网站和…

LC-杨辉三角-记忆版

LC-杨辉三角-记忆版 上一篇&#xff1a;LC-杨辉三角 上一篇讲了杨辉三角的算法&#xff0c;不过之前的算法存在一个问题&#xff0c;比如&#xff1a; a[5][3] a[4][2] a[4][3] a[5][4] a[4][3] a[4][4]我们可以看到计算a[5][3]和a[5][4]时都需要a[4][3]的值&#xff0c…

如何让PPT看起来规整统一

一、字体 常见问题&#xff1a;字体风格太多、文字可读性差、页面风格不匹配 1.使用文字的几个原则 &#xff08;1&#xff09;一份PPT最多使用两种中文字体 比如首页大标题宋体、正文黑体、其他页标题黑体加粗。通过粗细、字号、不同颜色背景等区分不同层级。注意 使用粗体…

【React学习】—jsx语法规则(三)

【React学习】—jsx语法规则&#xff08;三&#xff09; 一、jsx语法规则&#xff1a; 1、定义虚拟DOM&#xff0c;不要写引号&#xff0c; 2、标签中混入JS表达式要用{} 3、样式的类名指定不要用class&#xff0c;要用className 4、内联样式&#xff0c;要用style{{key:value}…

AWS中Lambda集成SNS

1.创建Lambda 在Lambda中&#xff0c;创建名为AWSSNSDemo的函数 use strict console.log(loading function); var aws require(aws-sdk); var docClient new aws.DynamoDB.DocumentClient(); aws.config.regionap-southeast-1;exports.handler function(event,context,cal…

一台电脑B用网线共享另外一台电脑A的WiFi网络,局域网其它电脑C怎么访问电脑B服务

环境: 电脑A:联想E14笔记本 系统:WIN10 专业版 局域网IP:192.168.14.111 共享IP:192.168.137.1 电脑B:HP 288pro 台式机 Ubuntu20.04 系统:共享IP:192.168.137.180 电脑A正常连接WIFI,电脑B没有WIFI只有,有线网口,共享电脑A的无线网 (还有一种桥接网络不在本…

pdf怎么转换成jpg图片?这几个转换方法了解一下

pdf怎么转换成jpg图片&#xff1f;转换PDF文件为JPG图片格式在现代工作中是非常常见的需求&#xff0c;比如将PDF文件中的图表、表格或者图片转换为JPG格式后使用在PPT演示、网页设计等场景中。 【迅捷PDF转换器】是一款非常实用的工具&#xff0c;可以将PDF文件转换成多种不同…

I/O 函数/缓存和字节流、占位符、getchar(),putchar()

I/O 函数 C 语言提供了一些函数&#xff0c;用于与外部设备通信&#xff0c;称为输入输出函数&#xff0c;简称 I/O 函数。输入&#xff08;import&#xff09;指的是获取外部数据&#xff0c;输出&#xff08;export&#xff09;指的是向外部传递数据。 缓存和字节流 严格地…

创建CREATE_STAT_TABLE 统计信息表在达梦和oracle中的使用

达梦 创建CREATE_STAT_TABLE 统计信息表 PROCEDURE CREATE_STAT_TABLE ( STATOWN VARCHAR(128), STATTAB VARCHAR(128), TABLESPACE VARCHAR(128) DEFAULT NULL, GLOBAL_TEMPORARY BOOLEAN DEFAULT FALSE ); 创建普通表的对应系统表的列名字段包括以下&#xff1a; OWNER TABL…

C 语言的逻辑运算符

C 语言的逻辑运算符包括三种&#xff1a; 逻辑运算符可以将两个关系表达式连接起来. Suppose exp1 and exp2 are two simple relational expressions, such as cat > rat and debt 1000 . Then you can state the following: ■ exp1 && exp2 is true only if bo…

MySQL 8.0 事务定义和基本操作

MySQL 事务&#xff08;Transaction&#xff09;的四大特性&#xff1a;A、C、I、D A、原子性&#xff1a;&#xff08;Atomicity&#xff09; 一个事务是不可分割的最小工作单位。 执行的事务&#xff0c;要么全部成功&#xff0c;要么回滚到执行事务之前的状态。 C、一致…