SpringBoot 啟動(dòng)報(bào)錯(cuò)Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379問題的解決方案
問題描述
使用開源項(xiàng)目 youlai-boot 中,使用默認(rèn)線上配置沒問題的,但將 Redis 的修改為本地的環(huán)境出現(xiàn)無法連接的錯(cuò)誤

啟動(dòng)項(xiàng)目報(bào)錯(cuò)關(guān)鍵信息:
org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379
稍微完整的錯(cuò)誤信息:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig' defined in file [D:\Project\Work\youlai-boot\target\classes\com\youlai\system\config\SecurityConfig.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'redisTemplate' defined in class path resource [com/youlai/system/config/RedisConfig.class]: Unsatisfied dependency expressed through method 'redisTemplate' parameter 0: Error creating bean with name 'redissonConnectionFactory' defined in class path resource [org/redisson/spring/starter/RedissonAutoConfigurationV2.class]: Unsatisfied dependency expressed through method 'redissonConnectionFactory' parameter 0: Error creating bean with name 'redisson' defined in class path resource [org/redisson/spring/starter/RedissonAutoConfigurationV2.class]: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redisson' threw exception with message: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379
錯(cuò)誤截圖:

原因分析
再看下修改前后的對(duì)比圖

線上 Redis 服務(wù)配置了密碼,而本地 Redis 服務(wù)沒有密碼,因此我們理所當(dāng)然地將 password 的值留空。然而,這正是問題的根本原因,因?yàn)榭罩等詴?huì)被解析為一個(gè)空字符串,而不是被忽略。
如果只是這樣說是沒有說服力的,接下來我將本著“源碼面前無秘密”的原則,深入揭示問題的本質(zhì)。
源碼分析
假設(shè)本地的 Redis 未配置密碼,SpringBoot 的 Redis 連接配置如下:
spring:
data:
redis:
database: 0
host: 127.0.0.1
port: 6379
password:
MasterSlaveConnectionManager#createClient 根據(jù)配置創(chuàng)建客戶端,其中配置的 password 是空字符串而不是null。

BaseConnectionHandler#channelActive 方法根據(jù)配置進(jìn)行 Redis 客戶端連接初始化。由于配置中的 password 被解析成空字符串而非 null,因此嘗試使用空字符串作為密碼連接 Redis,但由于 Redis 服務(wù)未設(shè)置密碼,連接失敗。

解決方案
由上可知,如果將配置的 password 值設(shè)置為空,則客戶端在連接時(shí)會(huì)使用空字符串作為密碼進(jìn)行認(rèn)證。由于服務(wù)端未設(shè)置密碼,因此連接失敗。
解決方法其實(shí)很簡(jiǎn)單,如果 Redis 服務(wù)未設(shè)置密碼,需要將 password 注釋或刪除,而不是設(shè)置為空字符串。
spring:
data:
redis:
database: 0
host: 127.0.0.1
port: 6379
# 如果 Redis 服務(wù)未設(shè)置密碼,需要將 password 刪除或注釋,而不是設(shè)置為空字符串
# password:
再次調(diào)試可以看到 password 為 null ,直接跳過密碼認(rèn)證,直接返回已完成的 CompletableFuture 對(duì)象

以上就是SpringBoot 啟動(dòng)報(bào)錯(cuò)Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379問題的解決方案的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 啟動(dòng)報(bào)錯(cuò)Unable connect Redis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot項(xiàng)目啟動(dòng)錯(cuò)誤:找不到或無法加載主類的三種解決方法
- spring boot啟動(dòng)出現(xiàn)Unable to start ServletWebServerApplicationContext due to missing ServletWebServer錯(cuò)誤解決
- 查看本地啟動(dòng)SpringBoot的本地端口號(hào)的幾種方式
- SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動(dòng)時(shí)執(zhí)行一次
- SpringBoot應(yīng)用啟動(dòng)慢的原因分析及優(yōu)化方法
- Spring boot啟動(dòng)原理及相關(guān)組件整理
相關(guān)文章
Springboot整合Redis實(shí)現(xiàn)超賣問題還原和流程分析(分布式鎖)
最近在研究超賣的項(xiàng)目,寫一段簡(jiǎn)單正常的超賣邏輯代碼,多個(gè)用戶同時(shí)操作同一段數(shù)據(jù)出現(xiàn)問題,糾結(jié)該如何處理呢?下面小編給大家?guī)砹薙pringboot整合Redis實(shí)現(xiàn)超賣問題還原和流程分析,感興趣的朋友一起看看吧2021-10-10
SpringBoot中熱點(diǎn)KEY緩存優(yōu)化的2種主流策略
所謂熱點(diǎn)KEY,是指在緩存或數(shù)據(jù)庫(kù)中被頻繁訪問的少量鍵值,這些鍵往往承載了系統(tǒng)中大部分的訪問流量,本文將分享SpringBoot中三種主流的熱點(diǎn)KEY緩存優(yōu)化策略,大家可以根據(jù)需求進(jìn)行選擇2025-04-04
Java實(shí)現(xiàn)子類自動(dòng)調(diào)用父類無參構(gòu)造函數(shù)
子類在Java中創(chuàng)建對(duì)象時(shí),會(huì)自動(dòng)調(diào)用父類的無參構(gòu)造函數(shù),如果父類只有有參構(gòu)造函數(shù),而子類沒有使用`super()`顯式調(diào)用父類構(gòu)造函數(shù),編譯器會(huì)報(bào)錯(cuò),因此,建議在類中總是定義無參構(gòu)造函數(shù)以避免潛在的錯(cuò)誤2026-01-01
Java實(shí)現(xiàn)計(jì)算機(jī)程序設(shè)計(jì)思路
這篇文章主要為大家介紹了Java實(shí)現(xiàn)計(jì)算機(jī)程序設(shè)計(jì)思路,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
多個(gè)SpringBoot項(xiàng)目采用redis實(shí)現(xiàn)Session共享功能
這篇文章主要介紹了多個(gè)SpringBoot項(xiàng)目采用redis實(shí)現(xiàn)Session共享,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot集成Redis數(shù)據(jù)庫(kù),實(shí)現(xiàn)緩存管理
SpringBoot2 版本,支持的組件越來越豐富,對(duì)Redis的支持不僅僅是擴(kuò)展了API,更是替換掉底層Jedis的依賴,換成Lettuce。 本案例需要本地安裝一臺(tái)Redis數(shù)據(jù)庫(kù)。下面就來看下集成Redis的步驟2021-06-06

