Redis查詢超時問題排查及原因分析


在操作Redis時要時刻記得Redis是單線程操作,如果有耗時的操作,會阻塞其他的操作。

 

上周四晚上開始釘釘群里Redis開始報警,不是很多,一晚上報了有個幾十條。數據(非大Key)寫入Redis失敗了。周五開始排查問題。個人認為周五上線和周五出BUG是最不爽的~

 開發平台是.net , 使用的是StackExchange.Redis來操作Redis。

在服務器上調用API返回錯誤信息如下:

 

"ExceptionMessage":"Timeout performing。。。感覺這個錯誤信息和OOM時顯示的信息一樣,顯示的錯誤位置和實際的錯誤位置根本沒有關系。還好里面還顯示了一個地址:https://stackexchange.github.io/StackExchange.Redis/Timeouts。里面詳細介紹了可能會導致Redis操作超時的原因,這樣就可以排查問題的具體點了。導致超時的原因是:List中的數據量到了幾十萬,在刪除時耗時比較久。阻塞了其他的操作。

 比較快的方法是通過Redis的slowlog命令來查看那個操作耗時較高。https://redis.io/commands/slowlog

redis> SLOWLOG GET
1) 1) (integer) 12                      # 唯一性(unique)的日志標識符
   2) (integer) 1324097834              # 被記錄命令的執行時間點,以 UNIX 時間戳格式表示
   3) (integer) 16                      # 查詢執行時間,以微秒為單位
   4) 1) "CONFIG"                       # 執行的命令,以數組的形式排列
      2) "GET"                          # 這里完整的命令是 CONFIG GET slowlog-log-slower-than
      3) "slowlog-log-slower-than"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM