線上Redis一直報(bào)連接超時(shí)該如何解決
大家好,我是小趴菜,這一天過的是真令人頭大呀,本來(lái)是接手一個(gè)同事維護(hù)的老項(xiàng)目就已經(jīng)頭疼的不行了,結(jié)果現(xiàn)在有大量的用戶反映應(yīng)線上服務(wù)不可用。
沒辦法,只能硬著頭皮上了,我打開了服務(wù)器上的日志,就發(fā)現(xiàn)大量的錯(cuò)誤日志,報(bào)的都是 redis的 Connection reset by peer錯(cuò)誤,我也不知道是什么意思,只能打開百度翻譯下,翻譯才知道這是重置連接的意思,很納悶,為什么redis會(huì)重置連接,后面找了點(diǎn)資料,說是有以下幾個(gè)原因?qū)е碌?/p>
- 1:服務(wù)器的并發(fā)連接數(shù)太多,超出了服務(wù)器的承載量,所以服務(wù)器會(huì)關(guān)閉一些連接
- 2:redis的TimeOut設(shè)置的太短
沒辦法一個(gè)一個(gè)的排查了
首先看了下項(xiàng)目配置,rdis使用的lettuce相關(guān)的線程池,但是設(shè)置了最大連接數(shù)有1000,那是不是有可能這個(gè)原因?qū)е碌哪兀?/p>
redis: host: 127.0.0.1 port: 6379 password: database: 0 timeout: 20000 lettuce: # 關(guān)閉超時(shí)時(shí)間 shutdown-timeout: 1000 pool: # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制) max-active: 1000 # 連接池中最大空閑連接 max-idle: 200 # 連接池中最大阻塞等待時(shí)間(使用負(fù)值標(biāo)識(shí)沒有限制) max-wait: 3000 # 連接池中的最小空閑連接 min-idle: 20
也只能試試了,將最大連接數(shù)調(diào)低,但是最后發(fā)現(xiàn)沒有解決這個(gè)問題,所以第一點(diǎn)我們可以排除了
所以現(xiàn)在只能看下是不是超時(shí)時(shí)間太短,但是我就在想,為什么會(huì)有這么多連接超時(shí)。
在這里我真的是想扇自己的心都有,一定要仔細(xì)看日志,一定要仔細(xì)看日志,一定要仔細(xì)看日志
在日志中已經(jīng)很清楚的打印出了具體的方法了,進(jìn)入這個(gè)對(duì)應(yīng)的方法才知道,這個(gè)方法有將所有地市的數(shù)據(jù)封裝成一個(gè)列表,然后存儲(chǔ)到redis中,然后后續(xù)直接從這個(gè)redis中查詢出來(lái)。
可問題就是這個(gè)地市的數(shù)據(jù)太多了,有幾萬(wàn)條,估計(jì)是前同事為了省事就直接一股腦的全放到一個(gè)key中了。那么這時(shí)候這個(gè)key就是個(gè)大key
這時(shí)候很多線程來(lái)查詢這個(gè)key,導(dǎo)致查詢的時(shí)間太久了,也就一直報(bào)連接超時(shí)了。 先不管,先把這個(gè)問題解決先,既然數(shù)據(jù)多,那我就分頁(yè)查詢數(shù)據(jù)庫(kù),我就不用redis了。加了索引其實(shí)查詢也很快。
發(fā)布上線之后觀察了一段時(shí)間,發(fā)現(xiàn)再也沒有這個(gè)問題了。所以可以肯定就是因?yàn)檫@個(gè)大key的原因才導(dǎo)致的
思考
因?yàn)楫?dāng)時(shí)用戶并發(fā)量較高,導(dǎo)致redis的連接數(shù)被占滿,后續(xù)有大量的用戶來(lái)申請(qǐng)redis連接,導(dǎo)致有些連接被強(qiáng)制關(guān)閉,也因?yàn)椴樵兊氖且粋€(gè)大key,所以導(dǎo)致線程的redis一直報(bào)連接超時(shí)
所以在使用redis做緩存時(shí)候一定要仔細(xì)小心,不能存儲(chǔ)大key,你可以將key進(jìn)行查分,或者是分頁(yè)查詢。
到此這篇關(guān)于線上Redis一直報(bào)連接超時(shí)該如何解決的文章就介紹到這了,更多相關(guān)Redis連接超時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式
這篇文章主要介紹了Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05使用Redis實(shí)現(xiàn)秒殺功能的簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于使用Redis實(shí)現(xiàn)秒殺功能的簡(jiǎn)單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05redis發(fā)布訂閱_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了redis發(fā)布訂閱,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-08-08Redis數(shù)據(jù)結(jié)構(gòu)之listpack和quicklist使用學(xué)習(xí)
這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)之listpack和quicklist的使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07CentOS Linux系統(tǒng)下安裝Redis過程和配置參數(shù)說明
這篇文章主要介紹了CentOS Linux系統(tǒng)下安裝Redis過程和配置參數(shù)說明,需要的朋友可以參考下2014-10-10