線上Redis一直報(bào)連接超時(shí)該如何解決
大家好,我是小趴菜,這一天過(guò)的是真令人頭大呀,本來(lái)是接手一個(gè)同事維護(hù)的老項(xiàng)目就已經(jīng)頭疼的不行了,結(jié)果現(xiàn)在有大量的用戶(hù)反映應(yīng)線上服務(wù)不可用。
沒(méi)辦法,只能硬著頭皮上了,我打開(kāi)了服務(wù)器上的日志,就發(fā)現(xiàn)大量的錯(cuò)誤日志,報(bào)的都是 redis的 Connection reset by peer錯(cuò)誤,我也不知道是什么意思,只能打開(kāi)百度翻譯下,翻譯才知道這是重置連接的意思,很納悶,為什么redis會(huì)重置連接,后面找了點(diǎn)資料,說(shuō)是有以下幾個(gè)原因?qū)е碌?/p>
- 1:服務(wù)器的并發(fā)連接數(shù)太多,超出了服務(wù)器的承載量,所以服務(wù)器會(huì)關(guān)閉一些連接
- 2:redis的TimeOut設(shè)置的太短
沒(méi)辦法一個(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ù)值表示沒(méi)有限制)
max-active: 1000
# 連接池中最大空閑連接
max-idle: 200
# 連接池中最大阻塞等待時(shí)間(使用負(fù)值標(biāo)識(shí)沒(méi)有限制)
max-wait: 3000
# 連接池中的最小空閑連接
min-idle: 20也只能試試了,將最大連接數(shù)調(diào)低,但是最后發(fā)現(xiàn)沒(méi)有解決這個(gè)問(wèn)題,所以第一點(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中查詢(xún)出來(lái)。
可問(wèn)題就是這個(gè)地市的數(shù)據(jù)太多了,有幾萬(wàn)條,估計(jì)是前同事為了省事就直接一股腦的全放到一個(gè)key中了。那么這時(shí)候這個(gè)key就是個(gè)大key
這時(shí)候很多線程來(lái)查詢(xún)這個(gè)key,導(dǎo)致查詢(xún)的時(shí)間太久了,也就一直報(bào)連接超時(shí)了。 先不管,先把這個(gè)問(wèn)題解決先,既然數(shù)據(jù)多,那我就分頁(yè)查詢(xún)數(shù)據(jù)庫(kù),我就不用redis了。加了索引其實(shí)查詢(xún)也很快。
發(fā)布上線之后觀察了一段時(shí)間,發(fā)現(xiàn)再也沒(méi)有這個(gè)問(wèn)題了。所以可以肯定就是因?yàn)檫@個(gè)大key的原因才導(dǎo)致的
思考
因?yàn)楫?dāng)時(shí)用戶(hù)并發(fā)量較高,導(dǎo)致redis的連接數(shù)被占滿(mǎn),后續(xù)有大量的用戶(hù)來(lái)申請(qǐng)redis連接,導(dǎo)致有些連接被強(qiáng)制關(guān)閉,也因?yàn)椴樵?xún)的是一個(gè)大key,所以導(dǎo)致線程的redis一直報(bào)連接超時(shí)
所以在使用redis做緩存時(shí)候一定要仔細(xì)小心,不能存儲(chǔ)大key,你可以將key進(jìn)行查分,或者是分頁(yè)查詢(xún)。
到此這篇關(guān)于線上Redis一直報(bào)連接超時(shí)該如何解決的文章就介紹到這了,更多相關(guān)Redis連接超時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從一個(gè)小需求感受Redis的獨(dú)特魅力(需求設(shè)計(jì))
Redis在實(shí)際應(yīng)用中使用的非常廣泛,本篇文章就從一個(gè)簡(jiǎn)單的需求說(shuō)起,為你講述一個(gè)需求是如何從頭到尾開(kāi)始做的,又是如何一步步完善的2019-12-12
Redis?存儲(chǔ)對(duì)象信息用?Hash?和String的區(qū)別
這篇文章主要介紹了Redis存儲(chǔ)對(duì)象信息用Hash和String的區(qū)別,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
gem install redis報(bào)錯(cuò)的解決方案
今天小編就為大家分享一篇關(guān)于gem install redis報(bào)錯(cuò)的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
使用Spring?Boot實(shí)現(xiàn)Redis鍵過(guò)期回調(diào)功能示例詳解
這篇文章主要介紹了使用Spring?Boot實(shí)現(xiàn)Redis鍵過(guò)期回調(diào)功能,就是一個(gè)實(shí)現(xiàn)Redis鍵過(guò)期回調(diào)功能的Spring?Boot應(yīng)用的示例,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
關(guān)于Redis解決Session共享問(wèn)題
這篇文章主要介紹了Redis解決Session共享問(wèn)題,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
redis緩存一致性延時(shí)雙刪代碼實(shí)現(xiàn)方式
這篇文章主要介紹了redis緩存一致性延時(shí)雙刪代碼實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

