redis間歇性斷連解決方式
使用lettuce 4.2.2.Fina版本作為redis的客戶(hù)端,出現(xiàn)間歇性斷連的情況,主要表現(xiàn)形式:
1、長(zhǎng)時(shí)間連接不被使用,突然有請(qǐng)求過(guò)來(lái)后出現(xiàn)大面積的。
2、使用過(guò)程中也偶現(xiàn)RedisCommandTimeoutException。
嘗試解決辦法:
一、開(kāi)啟lettuce連接檢查
開(kāi)啟連接池的連接檢查功能,定義LettuceConnectionFactory的bean時(shí)增加設(shè)置對(duì)應(yīng)的validateConnection屬性值為true,在每次使用鏈接前都增加一次ping的操作,如果ping不通代表當(dāng)前連接已經(jīng)不可用,再重新初始化連接。但是開(kāi)啟該功能會(huì)有較大的性能消耗,目前所做的性能壓測(cè)結(jié)果來(lái)看,平均耗時(shí)是不開(kāi)啟檢查時(shí)的7倍以上,詳情見(jiàn)下圖,這樣的性能消耗確實(shí)無(wú)法接受。
二、客戶(hù)端主動(dòng)增加心跳功能
客戶(hù)端新增定時(shí)任務(wù),定時(shí)檢查連接狀態(tài),比如每1s中檢查一次,或者每2s檢查一次,程序啟動(dòng)時(shí)便開(kāi)始執(zhí)行心跳任務(wù),具體方式:如圖:
存在的問(wèn)題:
1、通過(guò)開(kāi)啟連接池的連接檢查功能,能保證每一次拿到可用的連接,但是性能損耗過(guò)大;
2、通過(guò)增加心跳功能能夠解決長(zhǎng)時(shí)間連接不使用被斷開(kāi)的問(wèn)題,但是仍然存在心跳間隙期間無(wú)法獲取到可用連接的情況,無(wú)法做到100%拿到可用連接。
到此這篇關(guān)于redis間歇性斷連解決方式的文章就介紹到這了,更多相關(guān)redis間歇性斷連內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析高可用Redis服務(wù)架構(gòu)分析與搭建方案
我們按照由簡(jiǎn)至繁的步驟,搭建一個(gè)最小型的高可用的Redis服務(wù)。 本文通過(guò)四種方案給大家介紹包含每種方案的優(yōu)缺點(diǎn)及詳細(xì)解說(shuō),具體內(nèi)容詳情跟隨小編一起看看吧2021-06-06redis replication環(huán)形緩沖區(qū)算法詳解
這篇文章主要介紹了redis replication環(huán)形緩沖區(qū)算法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04Redis如何使用Pipeline實(shí)現(xiàn)批處理操作
Redis?Pipeline?是一種優(yōu)化?Redis?操作的機(jī)制,通過(guò)將多個(gè)命令打包發(fā)送到?Redis?服務(wù)器,減少客戶(hù)端與服務(wù)器之間的網(wǎng)絡(luò)往返時(shí)間,本文主要來(lái)聊聊Redis如何使用Pipeline實(shí)現(xiàn)批處理操作,需要的可以了解下2025-02-02Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用
本文主要介紹了Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08