现在的位置: 首页 > web前端 > 正文

Redis Operation timed out 的回答

2020年07月15日 web前端 ⁄ 共 1135字 ⁄ 字号 评论关闭

  环境:springboot2.0.7springdataredis ,springboot从1.x升级到2.x后,springdataredis使用的redis客户端驱动从1.x的jedis换到lettuce。使用过程中,出现Rediscommandtimedout报错,网上搜索后,很多文章都说配置项spring.redis.timeout在1.x可以设为0代表无限超时时间,而2.x必须要设置一个大于0的数,按此配置后确实正常了一段时间,但还是偶尔出现这问题


  springboot2.0Rediscommandtimedout的解决


  此时问题的症状是:


  timedout报错的时机不确定,但一个较高几率的情况是,功能很久没用时,第一次用报错几率很高,然后第二次以后就正常


  报错时一触发功能就报错,根本不像是超时,要等待一段时间才报错


  最终解决方法是,把redis驱动换回jedis,具体方法请百度这里不展开


  PS:在lettuce的github的issue有几个此问题的讨论,很多人跟我的情况也是一样出现timedout但都找不到规律和原因,而且讨论到结尾也没结果,只能认为是lettuce的bug.


  咚..咚


  使用PHP连接redisoperationtimedout连接太多的解决方案


  这个问题,大家在使用phpredis之后肯定都会遇到。所以本菜本着虚心求教的原则,又在网上四处求教。得到的答案,无非是以下两种:


  1、redis没有主动close。


  事后发现,这个答案纯属以讹传讹,胡说八道。


  2、配置/etc/sysctl.conf,更改如下配置:


  net.ipv4.tcp_syncookies=1


  net.ipv4.tcp_tw_reuse=1


  net.ipv4.tcp_tw_recycle=1


  net.ipv4.tcp_fin_timeout=20


  关于这个方案,虽然比较靠谱,但没完全正中靶心。执行/sbin/sysctl-p之后,发现timewait状态的连接没有改善。


  经过一番查找,终于本菜终于找到了原因,解决方案的配置如下:


  /etc/sysctl.conf


  net.ipv4.tcp_syncookies=1


  net.ipv4.tcp_tw_reuse=1


  net.ipv4.tcp_tw_recycle=1


  net.ipv4.tcp_timestamps=1


  net.ipv4.tcp_fin_timeout=20


  配置完成之后,执行/sbin/sysctl-p,再次运行redis,问题解决。


  总之,operationtimedout给大家简单的介绍了一些,希望大家多看看。


  

抱歉!评论已关闭.