开发环境:

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

问题描述:

1、配置信息

spring.redis.host=9.134.xxx.xxx
spring.redis.port=6380
spring.redis.password=spYKT*3342sddf2345Pw
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.max-wait=3000
spring.redis.lettuce.pool.min-idle=4
spring.redis.timeout=2s

2、报错日志

[2021-05-11 15:33:55.725] [lettuce-nioEventLoop-4-1] [DEBUG] [io.lettuce.core.protocol.CommandHandler:?] - [channel=0x0cec2b7a, /192.168.255.10:52795 -> /9.134.xxx.xxx:6379, chid=0x1] Completing command AsyncCommand [type=HELLO, output=GenericMapOutput [output=null, error='NOAUTH Authentication required.'], commandType=io.lettuce.core.protocol.Command]
[2021-05-11 15:33:55.729] [lettuce-nioEventLoop-4-1] [DEBUG] [io.lettuce.core.AbstractRedisClient:?] - Connecting to Redis at 9.134.xxx.xxx:6380, initialization
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,发现有人已经反馈过了。戳这里:bug
在这里插入图片描述


解决方案:

看了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>

如果还没解决可以加我一起讨论哦。
在这里插入图片描述
往期文章


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐