redis lettuce連接池經(jīng)常出現(xiàn)連接拒絕(Connection refused)問題解決
一.軟件環(huán)境
windows10、11系統(tǒng)、springboot2.x、redis 6 7
linux(centos)系統(tǒng)沒有出現(xiàn)這問題,如果你是linux系統(tǒng)碰到的,本文也有一定大參考價值。
根本思路就是:tcp/ip連接的?;?keepalive)。
二.問題描述
在springboot項目中使用了lettuce作為redis的連接池,在本地開發(fā)環(huán)境windows系統(tǒng)中,隔5分鐘不操作,再次需要訪問redis時,從連接池獲取一個連接去操作redis就會出現(xiàn)連接拒絕,一般直到取完max-idle(最大空閑連接數(shù))所有連接都是連接拒絕,直到開始創(chuàng)建新的連接,才能連接上redis。
三.問題分析
測試環(huán)境(linux)連的是同一個redis服務,卻沒有出現(xiàn)這樣的問題。
之前也試著從連接池配置去解決問題,然并卵。。。
lettuce: pool: # 連接池最大連接數(shù)(使用負值表示沒有限制) max-active: 8 # 連接池最大阻塞等待時間(使用負值表示沒有限制) max-wait: 1 # 連接池中的最大空閑連接 max-idle: 8 # 連接池中的最小空閑連接 min-idle: 0 cluster: refresh: adaptive: true #20秒自動刷新一次 period: 20
也試過網(wǎng)上說的各種方法都沒有效果。
后面想著,既然在linux系統(tǒng)中運行沒問題,windows系統(tǒng)有問題,在其它條件相同的情況下,那就只有操作系統(tǒng)的差異了。
那就可能是兩個系統(tǒng)維護tcp/ip的方式的不同了,因為連接池中的連接,本質(zhì)上就是一個個tcp/ip連接,要想讓連接?;?,服務端和客戶端,至少得有一方去做?;睿╧eepalive)操作。
為什么是隔5分鐘不操作,就必然出現(xiàn)redis連接拒絕呢?于是在redis配置文件中搜索“keepalive”發(fā)現(xiàn)tcp-keepalive配置,默認300s,這不正好5分鐘嗎?該配置是服務端每隔300秒檢查一下客戶端連接,如果可以連通,則讓連接保活,如果連不通了,則將連接銷毀。
那么導致redis服務端做?;畈僮骱?,redis連接就不可用了,應該就是windows系統(tǒng)在這5分鐘內(nèi),將tcp/ip連接給干掉了,導致redis服務端連接不到就把連接干掉了,而lettuce并不知道連接已經(jīng)斷開了,當有請求需要連接redis時,就從lettuce中拿一個已經(jīng)被服務端斷開連接去操作redis,于是就得到了連接拒絕的響應。
四.解決方案
方案 1:減少redis服務端配置文檔的tcp-keepalive的間隔時間,將上圖中的設置改為60后,重啟服務,經(jīng)過測試就沒有連接拒絕的問題了。
方案2:增加windows系統(tǒng)的tcp/ip連接的存活時間,但是這個修改過幾個配置,好像沒有效,也有說法是防火墻、殺毒軟件的防護策略等管理著tcp/ip的存活時間。如不可用,建議直接使用方案1。
到此這篇關于redis lettuce連接池經(jīng)常出現(xiàn)連接拒絕(Connection refused)問題解決的文章就介紹到這了,更多相關redis lettuce連接池連接拒絕內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux、Windows下Redis的安裝即Redis的基本使用詳解
Redis是一個基于內(nèi)存的key-value結構數(shù)據(jù)庫,Redis 是互聯(lián)網(wǎng)技術領域使用最為廣泛的存儲中間件,這篇文章主要介紹了Linux、Windows下Redis的安裝即Redis的基本使用詳解,需要的朋友可以參考下2022-09-09Redis實現(xiàn)短信登錄的企業(yè)實戰(zhàn)
本文主要介紹了Redis實現(xiàn)短信登錄的企業(yè)實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07