redis lettuce連接池經(jīng)常出現(xiàn)連接拒絕(Connection refused)問(wèn)題解決
一.軟件環(huán)境
windows10、11系統(tǒng)、springboot2.x、redis 6 7
linux(centos)系統(tǒng)沒(méi)有出現(xiàn)這問(wèn)題,如果你是linux系統(tǒng)碰到的,本文也有一定大參考價(jià)值。
根本思路就是:tcp/ip連接的保活(keepalive)。
二.問(wèn)題描述
在springboot項(xiàng)目中使用了lettuce作為redis的連接池,在本地開(kāi)發(fā)環(huán)境windows系統(tǒng)中,隔5分鐘不操作,再次需要訪(fǎng)問(wèn)redis時(shí),從連接池獲取一個(gè)連接去操作redis就會(huì)出現(xiàn)連接拒絕,一般直到取完max-idle(最大空閑連接數(shù))所有連接都是連接拒絕,直到開(kāi)始創(chuàng)建新的連接,才能連接上redis。
三.問(wèn)題分析
測(cè)試環(huán)境(linux)連的是同一個(gè)redis服務(wù),卻沒(méi)有出現(xiàn)這樣的問(wèn)題。
之前也試著從連接池配置去解決問(wèn)題,然并卵。。。
lettuce:
pool:
# 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)
max-active: 8
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)
max-wait: 1
# 連接池中的最大空閑連接
max-idle: 8
# 連接池中的最小空閑連接
min-idle: 0
cluster:
refresh:
adaptive: true
#20秒自動(dòng)刷新一次
period: 20也試過(guò)網(wǎng)上說(shuō)的各種方法都沒(méi)有效果。
后面想著,既然在linux系統(tǒng)中運(yùn)行沒(méi)問(wèn)題,windows系統(tǒng)有問(wèn)題,在其它條件相同的情況下,那就只有操作系統(tǒng)的差異了。
那就可能是兩個(gè)系統(tǒng)維護(hù)tcp/ip的方式的不同了,因?yàn)檫B接池中的連接,本質(zhì)上就是一個(gè)個(gè)tcp/ip連接,要想讓連接?;睿?wù)端和客戶(hù)端,至少得有一方去做保活(keepalive)操作。
為什么是隔5分鐘不操作,就必然出現(xiàn)redis連接拒絕呢?于是在redis配置文件中搜索“keepalive”發(fā)現(xiàn)tcp-keepalive配置,默認(rèn)300s,這不正好5分鐘嗎?該配置是服務(wù)端每隔300秒檢查一下客戶(hù)端連接,如果可以連通,則讓連接?;?,如果連不通了,則將連接銷(xiāo)毀。

那么導(dǎo)致redis服務(wù)端做?;畈僮骱螅瑀edis連接就不可用了,應(yīng)該就是windows系統(tǒng)在這5分鐘內(nèi),將tcp/ip連接給干掉了,導(dǎo)致redis服務(wù)端連接不到就把連接干掉了,而lettuce并不知道連接已經(jīng)斷開(kāi)了,當(dāng)有請(qǐng)求需要連接redis時(shí),就從lettuce中拿一個(gè)已經(jīng)被服務(wù)端斷開(kāi)連接去操作redis,于是就得到了連接拒絕的響應(yīng)。
四.解決方案
方案 1:減少redis服務(wù)端配置文檔的tcp-keepalive的間隔時(shí)間,將上圖中的設(shè)置改為60后,重啟服務(wù),經(jīng)過(guò)測(cè)試就沒(méi)有連接拒絕的問(wèn)題了。
方案2:增加windows系統(tǒng)的tcp/ip連接的存活時(shí)間,但是這個(gè)修改過(guò)幾個(gè)配置,好像沒(méi)有效,也有說(shuō)法是防火墻、殺毒軟件的防護(hù)策略等管理著tcp/ip的存活時(shí)間。如不可用,建議直接使用方案1。
到此這篇關(guān)于redis lettuce連接池經(jīng)常出現(xiàn)連接拒絕(Connection refused)問(wèn)題解決的文章就介紹到這了,更多相關(guān)redis lettuce連接池連接拒絕內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解redis_memcached失效原理(小結(jié))
這篇文章主要介紹了深入理解redis_memcached失效原理(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Linux、Windows下Redis的安裝即Redis的基本使用詳解
Redis是一個(gè)基于內(nèi)存的key-value結(jié)構(gòu)數(shù)據(jù)庫(kù),Redis 是互聯(lián)網(wǎng)技術(shù)領(lǐng)域使用最為廣泛的存儲(chǔ)中間件,這篇文章主要介紹了Linux、Windows下Redis的安裝即Redis的基本使用詳解,需要的朋友可以參考下2022-09-09
Redis為什么默認(rèn)有16個(gè)數(shù)據(jù)庫(kù)問(wèn)題
這篇文章主要介紹了Redis為什么默認(rèn)有16個(gè)數(shù)據(jù)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
一文搞懂Redis中String數(shù)據(jù)類(lèi)型
string 是 redis 最基本的類(lèi)型,你可以理解成與 Memcached 一模一樣的類(lèi)型,一個(gè) key 對(duì)應(yīng)一個(gè) value。今天通過(guò)本文給大家介紹下Redis中String數(shù)據(jù)類(lèi)型,感興趣的朋友一起看看吧2022-04-04
緩存穿透是指當(dāng)用戶(hù)在查詢(xún)一條數(shù)據(jù)的時(shí)候,而此時(shí)數(shù)據(jù)庫(kù)和緩存卻沒(méi)有關(guān)于這條數(shù)據(jù)的任何記錄,而這條數(shù)據(jù)在緩存中沒(méi)找到就會(huì)向數(shù)據(jù)庫(kù)請(qǐng)求獲取數(shù)據(jù)。用戶(hù)拿不到數(shù)據(jù)時(shí),就會(huì)一直發(fā)請(qǐng)求,查詢(xún)數(shù)據(jù)庫(kù),這樣會(huì)對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)造成很大的壓力2022-07-07
Redis實(shí)現(xiàn)短信登錄的企業(yè)實(shí)戰(zhàn)
本文主要介紹了Redis實(shí)現(xiàn)短信登錄的企業(yè)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

