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