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"
原文地址:https://www.cnblogs.com/andy-2014/p/11882367.html