Lettuce 实战之连接超时问题
问题
使用lettuce作为redis连接池,在访问redis时,偶尔会抛出RedisCommandTimeoutException,但隔一会儿又好了。
为什么lettuce有自动重连机制,却还是会出现连接超时的问题?为什么lettuce在连接断掉后,没有立即重连,而是需要等待十多分钟才重新连接?
在lettuce client和redis server之间创建TCP连接后,由于网络等原因导致TCP连接中断后,lettuce client等待TCP连接进行重试,直到重试完成后还是无法成功才创建新的连接。重试次数与操作系统配置有关。
根据下述图表,在重试15次时,超时时间约为13.4分钟,这就是为什么lettuce的自动重连,会等待十多分钟才进行重连。
重传机制参考 https://pracucci.com/linux-tcp-rto-min-max-and-tcp-retries2.html
查看TCP重试次数配置
cat /proc/sys/net/ipv4/tcp_retries2
解决方法
- 一是调低操作系统中TCP重试的次数,例如5次,这样在连接断掉后,等待几秒钟就会立即重联。
- 二是在获取redis connection时,验证该连接是否可用,不可用则创建一个新的连接返回,配置如下
LettuceConnectionFactory factory = new LettuceConnectionFactory();
factory.setValidateConnection(true);
标签:
Redis
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~