记录一次间歇性的产线报错,RedisCommandTimeoutException:Commond timed out after 15 second(s)

场景

使用spring-boot-starter-data-redis依赖,底层使用lettuce报错。通过分析,和设置的两个超时参数又关系。由于redis服务器处理命令可以理解为单线程的形式,所以这种情况可以理解为缓存需崩。

connect-timeout-in-millis: 连接超时时间
read-timeout-in-millis: 读超时时间

这两个超时时间的配置不同,可能会导致雪崩。

举例说明

上代码,直接一brpop命令模拟,通过配置不同的超时时间,开启客户端写入数据。
在这里插入图片描述

一种情况: 连接超时时间(5s) < 读超时时间(6s)
这种情况下,假如一个命令阻塞时间比较长,时间超过5s,就会抛出 RedisCommandTimeoutException: Command timed out after 5 second(s) ,就会引起雪崩,这是因为假如队列中有超过 100 个命令。 头部命令还没有收到响应,而队列底部命令从同步的角度来看超时了。换个角度来说,这些超时的命令已经发送到服务器,并未从redis服务器移除。


结论

connect-timeout-in-millis,read-timeout-in-millis 这两个超时时间设置还是比较讲究,最好设置 连接超时时间 > 读超时时间,具体时间参考相关业务科学设置。

以上仅代表个人观点,如有不足,请指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值