网站个人信息页面布局,公司外文网站制作,wordpress怎么填,免费素材网站pexels一.软件环境
windows10、11系统、springboot2.x、redis 6 7
linux#xff08;centos#xff09;系统没有出现这问题#xff0c;如果你是linux系统碰到的#xff0c;本文也有一定大参考价值。
根本思路就是#xff1a;tcp/ip连接的保活(keepalive)。
二.问题描述 在spr…一.软件环境
windows10、11系统、springboot2.x、redis 6 7
linuxcentos系统没有出现这问题如果你是linux系统碰到的本文也有一定大参考价值。
根本思路就是tcp/ip连接的保活(keepalive)。
二.问题描述 在springboot项目中使用了lettuce作为redis的连接池在本地开发环境windows系统中隔5分钟不操作再次需要访问redis时从连接池获取一个连接区操作redis就会出现连接拒绝一般直到取完max-idle最大空闲连接数开始创建新的连接才能连接上redis。
三.问题分析
测试环境linux连的是同一个redis服务却没有出现这样的问题。
之前也试着从连接池配置去解决问题没有用。 lettuce:pool:# 连接池最大连接数使用负值表示没有限制max-active: 8# 连接池最大阻塞等待时间使用负值表示没有限制max-wait: 1# 连接池中的最大空闲连接max-idle: 8# 连接池中的最小空闲连接min-idle: 0cluster:refresh:adaptive: true#20秒自动刷新一次period: 20
也试过网上说的各种方法都没有效果。
后面想着既然在linux系统中运行没问题windows系统有问题在其它条件相同的情况下那就只有操作系统的差异了。
那就可能是两个系统维护tcp/ip的方式问题上了因为连接池中的连接本质上就是一个个tcp/ip连接要想让连接保活服务端和客户端至少得有一方去做保活keepalive操作。
为什么是隔5分钟不操作就必然出现redis连接拒绝呢于是在redis配置文件中搜索“keepalive”发现tcp-keepalive配置默认300s这不正好5分钟吗该配置是服务端每隔300秒检查一下客户端连接如果可以连通则让连接保活如果连不通了则将连接销毁。 那么导致redis服务端做保活操作后redis连接就不可用了应该就是windows系统在这5分钟内将tcp/ip连接给干掉了导致redis服务端连接不到。
四.解决方案 方案 1减少redis服务端配置文档的tcp-keepalive的间隔时间将上图中的设置改为60后重启服务经过测试就没有连接拒绝的问题了。 方案2增加windows系统的tcp/ip连接的存活时间但是这个修改过几个配置好像没有效也有说法是防火墙、杀毒软件的防护策略等管理着tcp/ip的存活时间。如不可用建议直接使用方案1。