记一次redis连接超时问题

简介: 使用springboot 2.1.4,redis连接池使用lettuce,应用运行一段时间后会出现redis连接超时问题

现象:业务代码开发好后,部署到服务器上,刚部署好后应用的访问以及操作都没有问题,当应用运行操作一段时间后将会出现redis连接超时,重新启动应用后,又可以正常运行,运行一段时间后将再次出现redis连接超时。错误信息如下:
分析一:看到连接超时,考虑可能是由于服务器间网络不稳定,设置的超时时间太短导致的,就将超时时间增大到3秒(服务器都是在客户内网,所以网络延迟不会很大),再次将服务器启动,运行一段时间后发现服务器又挂了,错误信息还是上面的。
分析二:超时时间已经增长了,有没有可能是因为用户过多,导致连接占满,后面的用户拿不到连接导致的,然后就将连接池的最大连接数增大到500,再次将服务器启动,运行一段时间后发现服务器又挂了,错误信息还是上面的。
分析三:以上两钟情况都是根据redis的配置考虑的,那有没有可能是因为第一个人使用后的连接一直没有回收使用,然后就通过定时任务解决长期空闲lettuce连接关闭但是netty不能及时监控到的问题,代码如下:
@Scheduled(cron="0/5 ?")
public void task() {
if(redisConnectionFactory instanceof LettuceConnectionFactory){
LettuceConnectionFactory c=(LettuceConnectionFactory)redisConnectionFactory;
c.validateConnection();
}
同时开启获取连接的校验
@Override
public void afterPropertiesSet() throws Exception {
if(redisConnectionFactory instanceof LettuceConnectionFactory){
LettuceConnectionFactory c=(LettuceConnectionFactory)redisConnectionFactory;
c.setValidateConnection(true);
}
}
再次将服务器启动,这次服务器运行了较长一段时间,直到redis集群其中一台服务器挂了之后再次出现上面的问题。
分析四:前面一段时间都能正常运行,这次是因为redis集群其中一台服务器挂了导致的服务器报错,应该和redis集群有关,然后就查找资料发现:由于当Redis集群中某个节点挂掉之后,lettuce连接池还在使用挂掉的节点信息,Lettuce支持redis 集群拓扑动态刷新,但是默认并没有开启,SpringBoot在集成Lettuce时默认也没有开启,在SpringBoot2.3.0之后才有配置项设置Lettuce自动刷新拓扑的,解决方案参考文档:https://blog.csdn.net/u013202238/article/details/108528650

相关文章
|
9月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
723 5
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
1788 160
|
缓存 NoSQL Redis
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
1420 3
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
326 0
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
|
NoSQL Redis 数据库
Redis 连接
10月更文挑战第19天
266 0
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
503 0
|
消息中间件 存储 NoSQL
java连接redis和基础操作命令
通过以上内容,您可以掌握在Java中连接Redis以及进行基础操作的基本方法,进而在实际项目中灵活应用。
760 30
|
监控 NoSQL 网络协议
【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。 开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。因此,超时问题很可能是由于NAT Gateway更新事件导致TCP连接被重置。
405 7
|
NoSQL 网络协议 Redis
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
609 1
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
|
NoSQL 网络协议 算法
Redis 客户端连接
10月更文挑战第21天
258 1