最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3.X:Unable to connect to Redis錯誤及解決方案

 更新時間:2025年12月29日 09:06:04   作者:z***0655  
本文介紹了在Spring Boot 3.4項目中使用Lettuce連接Redis時遇到的問題,通過分析和解決這個問題,作者總結(jié)了兩種解決方案:手動配置LettuceClientConfiguration.clientOptions的protocolversion和將Lettuce升級到6.5

一.背景

最近在搭建一個新項目,本著有新用新的原則,項目選擇到了jdk17+SpringBoot3.4。

但是在測試Redis連接的時候卻遇到了以下問題:

redis連不上了。

于是我先去檢查了配置文件的連接信息,發(fā)現(xiàn)沒問題;再去檢查配置類:

也沒發(fā)現(xiàn)問題。

并且我去啟動了以前用SpringBoot2.X的老項目,發(fā)現(xiàn)同樣的配置下,以前的老項目就能成功連上Redis。那這下就大概可以確定原因了:SpringBoot3.4版本下,引用的spring-boot-starter-data-redis可能有點(diǎn)毛病。

二.發(fā)現(xiàn)問題

1.問題發(fā)現(xiàn)

既然可能是版本問題,那就只能去github上看看了

果然也有其它人遇到了相同的問題,不過還好這個問題已經(jīng)被解決了

翻譯一下就是:

Lettuce驅(qū)動程序版本在Spring Data和Spring Boot版本之間發(fā)生了變化,這些版本改變了握手行為。我建議您通過clientOptions.builder(). protocolversion (ProtocolVersion.RESP2).build()來配置LettuceClientConfiguration.clientOptions,來強(qiáng)制RESP2處理,這樣你就不會遇到HELLO錯誤,并且將使用AUTH命令來應(yīng)用身份驗(yàn)證。

看起來Lettuce客戶端已經(jīng)通過redis/ Lettuce #3035修復(fù)了6.5版本的問題。

在任何情況下,這都是驅(qū)動程序的問題。

據(jù)此可以得到兩種解決方案:

(1)手動配置LettuceClientConfiguration.clientOptions的protocolversion

(2)將Lettuce升級到6.5

2.問題驗(yàn)證

我的“spring-boot-starter-data-redis”版本是跟著springboot版本走的,也就是3.4.0

接下來看一下“spring-boot-starter-data-redis”提供的lettuce依賴

可以看,到lettuce依賴版本默認(rèn)是6.4.1,而不是已經(jīng)解決bug的6.5。接下來對程序debug驗(yàn)證一下lettuce版本為6.4.1時,LettuceClientConfiguration.clientOptions的protocolversion

可以看到,Spring為我們自動配置的RedisConnectionFactory中,clientOptions的protocolVersion屬性為null,沒有被設(shè)置為RESP2。

三.解決方案

1.手動配置LettuceClientConfiguration.clientOptions的protocolversion

我們不使用Spring為我們自動配置的RedisConnectionFactory,而是自己配置一個LettuceConnectionFactory交給IOC容器管理。

在配置LettuceConnectionFactory時通過配置ClientOptions的protocolVersion為RESP2,來解決連接bug。

(1)配置代碼

自己配置LettuceConnectionFactory的話還需要引入外部連接池依賴

        <dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>

    /**
     * 配置線程池連接工廠LettuceConnectionFactory
     * @return
     */
    @Bean
    public LettuceConnectionFactory lettuceConnectionFactory(){
        // redis配置
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(host, port);
        redisStandaloneConfiguration.setDatabase(dataBase);
        redisStandaloneConfiguration.setPassword(password);

        // 連接池配置
        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
        genericObjectPoolConfig.setMinIdle(minIdle);
        genericObjectPoolConfig.setMaxIdle(maxIdle);
        genericObjectPoolConfig.setMaxWait(Duration.ofDays(maxWait));
        genericObjectPoolConfig.setMaxTotal(maxActive);

        // ClientOptions配置
        ClientOptions clientOptions = ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).build();

        // redis客戶端配置
        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder
                builder =  LettucePoolingClientConfiguration
                .builder()
                .clientOptions(clientOptions)
                .commandTimeout(Duration.ofMillis(timeOut));

        builder.poolConfig(genericObjectPoolConfig);
        LettuceClientConfiguration lettuceClientConfiguration = builder.build();
        return new LettuceConnectionFactory(redisStandaloneConfiguration,lettuceClientConfiguration);
    }

(2)啟動驗(yàn)證

可以看到此時注入進(jìn)來的RedisConnectionFactory就是我們自己配置的LettuceConnectionFactory,其ClientOptions的protocolVersion屬性為RESP2。Redis可以被正常連接。

2.將Lettuce升級到6.5

這種方法就比較簡單粗暴了,既然“spring-boot-starter-data-redis”提供的lettuce依賴版本為6.4,那我們就不用它提供的了,自己引入版本為6.5的lettuce依賴。

(1)配置代碼

        <!--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>
		<!--lettuce-->
		<dependency>
			<groupId>io.lettuce</groupId>
			<artifactId>lettuce-core</artifactId>
			<version>${lettuce.version}</version>
		</dependency>
		<!--外部連接池-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>

其中l(wèi)ettuce.version是6.5.0.RELEASE。最下面的“commons-pool2”是如果要自己配置LettuceConnectionFactory才需要引入,也就是方案一要用到,這里沒有刪掉。

(2)啟動驗(yàn)證

IOC容器中的Spring為我們自動配置的RedisConnectionFactory的clientOptions.protocolVersion仍然是null,但是此時Redis已經(jīng)可以正常連接上了,說明Lettuce 6.5.0已經(jīng)解決了認(rèn)證連接bug。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Mybatis之參數(shù)傳遞的幾種姿勢

    淺談Mybatis之參數(shù)傳遞的幾種姿勢

    在mybatis的日常開發(fā)中,mapper接口中定義的參數(shù)如何與xml中的參數(shù)進(jìn)行映射呢?本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Spring 依賴注入實(shí)現(xiàn)示例

    Spring 依賴注入實(shí)現(xiàn)示例

    這篇文章主要介紹了Spring 依賴注入實(shí)現(xiàn)示例的相關(guān)資料,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-11-11
  • Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)

    Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)

    這篇文章主要介紹了Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • Java深度優(yōu)先遍歷解決排列組合問題詳解

    Java深度優(yōu)先遍歷解決排列組合問題詳解

    這篇文章主要介紹了Java深度優(yōu)先遍歷解決排列組合問題詳解,深度優(yōu)先搜索是遞歸過程,帶有回退操作,因此需要使用棧存儲訪問的路徑信息,當(dāng)訪問到的當(dāng)前頂點(diǎn)沒有可以前進(jìn)的鄰接頂點(diǎn)時,需要進(jìn)行出棧操作,將當(dāng)前位置回退至出棧元素位置,需要的朋友可以參考下
    2024-01-01
  • java中double強(qiáng)制轉(zhuǎn)換int引發(fā)的OOM問題記錄

    java中double強(qiáng)制轉(zhuǎn)換int引發(fā)的OOM問題記錄

    這篇文章主要介紹了java中double強(qiáng)制轉(zhuǎn)換int引發(fā)的OOM問題記錄,本文給大家分享問題排查過程,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • selenium+java+chrome環(huán)境搭建的方法步驟

    selenium+java+chrome環(huán)境搭建的方法步驟

    這篇文章主要介紹了selenium+java+chrome環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java畢業(yè)設(shè)計實(shí)戰(zhàn)之藥店信息管理系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計實(shí)戰(zhàn)之藥店信息管理系統(tǒng)的實(shí)現(xiàn)

    這是一個使用了java+SSM+JSP+layui+maven+mysql開發(fā)的藥店信息管理系統(tǒng),是一個畢業(yè)設(shè)計的實(shí)戰(zhàn)練習(xí),具有藥店信息管理該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • SpringMVC上傳和解析Excel方法

    SpringMVC上傳和解析Excel方法

    這篇文章主要介紹了SpringMVC上傳和解析Excel方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • java開發(fā)分布式服務(wù)框架Dubbo調(diào)用過程

    java開發(fā)分布式服務(wù)框架Dubbo調(diào)用過程

    這篇文章主要為大家介紹了java開發(fā)分布式服務(wù)框架Dubbo調(diào)用過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • Spring-Boot 訪問外部接口的方案總結(jié)

    Spring-Boot 訪問外部接口的方案總結(jié)

    在Spring-Boot項目開發(fā)中,存在著本模塊的代碼需要訪問外面模塊接口,或外部url鏈接的需求,針對這一需求目前存在著三種解決方案,下面將對這三種方案進(jìn)行整理和說明,對Spring-Boot 訪問外部接口方案感興趣的朋友跟隨小編一起看看吧
    2022-12-12

最新評論

陇西县| 衡东县| 安岳县| 德令哈市| 大足县| 天津市| 保靖县| 光泽县| 民勤县| 西昌市| 永年县| 洛阳市| 浮山县| 临海市| 唐河县| 屯昌县| 乌鲁木齐县| 睢宁县| 景德镇市| 洛扎县| 廊坊市| 双鸭山市| 蛟河市| 泰顺县| 唐河县| 济源市| 封丘县| 许昌县| 莲花县| 泰州市| 抚顺县| 临漳县| 三都| 塔河县| 肇源县| 东港市| 阿坝| 兴海县| 安岳县| 柘荣县| 定兴县|