工作中的點點滴滴-lettuce連接池連接redis失敗

背景

  新項目爲了推進多環境(test,pre,prd)部署,在測試環境測試通過之後部署預發環境的時候,服務一直報錯,提示【io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.】,這個提示一般情況下的意思是:redis服務配置了密碼,客戶端鏈接的時候沒有填寫密碼。但是代碼和測試環境同一套的,在測試環境都正常測試通過了的。

分析

  先查看了測試環境和預發環境的redis是不是同一個版本的(因爲你不知道運維給你的版本會是多少年前的老古董),預發環境是4.1.1的。然後我的springboot的版本是2.4.13的,使用的lettuce是6.0.8的,Lettuce 6.x版本開始,使用RESP3(Redis 6.x引入)的HELLO命令進行版本自適應判斷,但是對於不支持HELLO命令的低版本實例,兼容性存在一定問題。所以對於低版本的實例,建議直接在Lettuce中指定使用RESP2協議(兼容Redis 4/5)的版本來使用。

解決方案

  第一種:修改協議

 1 import io.lettuce.core.ClientOptions;
 2 import io.lettuce.core.protocol.ProtocolVersion;
 3 import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
 4 import org.springframework.context.annotation.Configuration;
 5 import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
 6 
 7 @Configuration
 8 public class SpringConfig implements LettuceClientConfigurationBuilderCustomizer {
 9 
10     @Override
11     public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) {
12         // manually specifying RESP2
13         clientConfigurationBuilder.clientOptions(ClientOptions.builder()
14                 .protocolVersion(ProtocolVersion.RESP2)
15                 .build());
16     }
17 }

  第二種:使用低版本的lettuce

 1   <dependency>
 2             <groupId>org.springframework.boot</groupId>
 3             <artifactId>spring-boot-starter-data-redis</artifactId>
 4             <exclusions>
 5                 <exclusion>
 6                     <groupId>io.lettuce</groupId>
 7                     <artifactId>lettuce-core</artifactId>
 8                 </exclusion>
 9             </exclusions>
10         </dependency>
11         <dependency>
12             <groupId>io.lettuce</groupId>
13             <artifactId>lettuce-core</artifactId>
14             <version>5.3.7.RELEASE</version>
15             <scope>compile</scope>
16         </dependency>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章