记一次redis连接超时问题

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 使用springboot 2.1.4,redis连接池使用lettuce,应用运行一段时间后会出现redis连接超时问题

现象:业务代码开发好后,部署到服务器上,刚部署好后应用的访问以及操作都没有问题,当应用运行操作一段时间后将会出现redis连接超时,重新启动应用后,又可以正常运行,运行一段时间后将再次出现redis连接超时。错误信息如下:

lQLPDhrI2pok2evNAf_NBQOwZy7S-v7ImmABdlJk_0AIAA_1283_511.png

分析一:看到连接超时,考虑可能是由于服务器间网络不稳定,设置的超时时间太短导致的,就将超时时间增大到3秒(服务器都是在客户内网,所以网络延迟不会很大),再次将服务器启动,运行一段时间后发现服务器又挂了,错误信息还是上面的。


分析二:超时时间已经增长了,有没有可能是因为用户过多,导致连接占满,后面的用户拿不到连接导致的,然后就将连接池的最大连接数增大到500,再次将服务器启动,运行一段时间后发现服务器又挂了,错误信息还是上面的。


分析三:以上两钟情况都是根据redis的配置考虑的,那有没有可能是因为第一个人使用后的连接一直没有回收使用,然后就通过定时任务解决长期空闲lettuce连接关闭但是netty不能及时监控到的问题,代码如下:

@Scheduled(cron="0/5 * * * * ?")

publicvoidtask() {

if(redisConnectionFactory instanceofLettuceConnectionFactory){

LettuceConnectionFactory c=(LettuceConnectionFactory)redisConnectionFactory;

c.validateConnection();

}

同时开启获取连接的校验

@Override

publicvoidafterPropertiesSet()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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
12天前
|
NoSQL Redis 数据库
Redis 连接
10月更文挑战第19天
20 0
|
3月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
149 3
|
3月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Redis 连接失败
【Azure Redis 缓存】Redis 连接失败
|
3月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
|
3月前
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
3月前
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
|
10天前
|
NoSQL 网络协议 算法
Redis 客户端连接
10月更文挑战第21天
18 1
|
20天前
|
NoSQL Java API
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试一线互联网企业时遇到了关于Redis分布式锁过期及自动续期的问题。尼恩对此进行了系统化的梳理,介绍了两种核心解决方案:一是通过增加版本号实现乐观锁,二是利用watch dog自动续期机制。后者通过后台线程定期检查锁的状态并在必要时延长锁的过期时间,确保锁不会因超时而意外释放。尼恩还分享了详细的代码实现和原理分析,帮助读者深入理解并掌握这些技术点,以便在面试中自信应对相关问题。更多技术细节和面试准备资料可在尼恩的技术文章和《尼恩Java面试宝典》中获取。
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
58 2
|
3月前
|
NoSQL 网络协议 Redis
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路