环境: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给大家简单的介绍了一些,希望大家多看看。