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客戶端

  1. 引入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>
  1. 引入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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章