线上Redis一直报连接超时该如何解决

 更新时间:2023年08月10日 09:05:01   作者:我是小趴菜  
这篇文章主要为大家详细介绍了项目开发时如果出现线上Redis一直报连接超时的问题该如何解决,文中的示例代码简洁易懂,需要的小伙伴可以借鉴一下

大家好,我是小趴菜,这一天过的是真令人头大呀,本来是接手一个同事维护的老项目就已经头疼的不行了,结果现在有大量的用户反映应线上服务不可用。

没办法,只能硬着头皮上了,我打开了服务器上的日志,就发现大量的错误日志,报的都是 redis的 Connection reset by peer错误,我也不知道是什么意思,只能打开百度翻译下,翻译才知道这是重置连接的意思,很纳闷,为什么redis会重置连接,后面找了点资料,说是有以下几个原因导致的

  • 1:服务器的并发连接数太多,超出了服务器的承载量,所以服务器会关闭一些连接
  • 2:redis的TimeOut设置的太短

没办法一个一个的排查了

首先看了下项目配置,rdis使用的lettuce相关的线程池,但是设置了最大连接数有1000,那是不是有可能这个原因导致的呢?

redis:
  host: 127.0.0.1
  port: 6379
  password: 
  database: 0
  timeout: 20000
  lettuce:
    # 关闭超时时间
    shutdown-timeout: 1000
    pool:
      # 连接池最大连接数(使用负值表示没有限制)
      max-active: 1000
      # 连接池中最大空闲连接
      max-idle: 200
      # 连接池中最大阻塞等待时间(使用负值标识没有限制)
      max-wait: 3000
      # 连接池中的最小空闲连接
      min-idle: 20

也只能试试了,将最大连接数调低,但是最后发现没有解决这个问题,所以第一点我们可以排除了

所以现在只能看下是不是超时时间太短,但是我就在想,为什么会有这么多连接超时。

在这里我真的是想扇自己的心都有,一定要仔细看日志,一定要仔细看日志,一定要仔细看日志

在日志中已经很清楚的打印出了具体的方法了,进入这个对应的方法才知道,这个方法有将所有地市的数据封装成一个列表,然后存储到redis中,然后后续直接从这个redis中查询出来。

可问题就是这个地市的数据太多了,有几万条,估计是前同事为了省事就直接一股脑的全放到一个key中了。那么这时候这个key就是个大key

这时候很多线程来查询这个key,导致查询的时间太久了,也就一直报连接超时了。 先不管,先把这个问题解决先,既然数据多,那我就分页查询数据库,我就不用redis了。加了索引其实查询也很快。

发布上线之后观察了一段时间,发现再也没有这个问题了。所以可以肯定就是因为这个大key的原因才导致的

思考

因为当时用户并发量较高,导致redis的连接数被占满,后续有大量的用户来申请redis连接,导致有些连接被强制关闭,也因为查询的是一个大key,所以导致线程的redis一直报连接超时

所以在使用redis做缓存时候一定要仔细小心,不能存储大key,你可以将key进行查分,或者是分页查询。

到此这篇关于线上Redis一直报连接超时该如何解决的文章就介绍到这了,更多相关Redis连接超时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 从一个小需求感受Redis的独特魅力(需求设计)

    从一个小需求感受Redis的独特魅力(需求设计)

    Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的
    2019-12-12
  • Redis 存储对象信息用 Hash 和String的区别

    Redis 存储对象信息用 Hash 和String的区别

    这篇文章主要介绍了Redis存储对象信息用Hash和String的区别,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • gem install redis报错的解决方案

    gem install redis报错的解决方案

    今天小编就为大家分享一篇关于gem install redis报错的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 深入理解Redis 内存管理

    深入理解Redis 内存管理

    本文主要介绍了深入理解Redis 内存管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 详解redis端口号

    详解redis端口号

    在本篇内容中我们给大家整理了关于redis端口号的相关知识点内容,有兴趣的朋友们学习下。
    2019-06-06
  • 使用Spring Boot实现Redis键过期回调功能示例详解

    使用Spring Boot实现Redis键过期回调功能示例详解

    这篇文章主要介绍了使用Spring Boot实现Redis键过期回调功能,就是一个实现Redis键过期回调功能的Spring Boot应用的示例,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Redis数据库原理深入刨析

    Redis数据库原理深入刨析

    在之前的文章我们介绍过,Redis服务器在启动之初,会初始化RedisServer的实例,在这个实例中存在很多重要的属性结构,同理本篇博客中介绍的数据库实现原理也会和其中的某些属性相关,我们继续看一下吧
    2022-11-11
  • 关于Redis解决Session共享问题

    关于Redis解决Session共享问题

    这篇文章主要介绍了Redis解决Session共享问题,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • redis缓存一致性延时双删代码实现方式

    redis缓存一致性延时双删代码实现方式

    这篇文章主要介绍了redis缓存一致性延时双删代码实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 基于redis集群设置密码的实例

    基于redis集群设置密码的实例

    今天小编就为大家分享一篇基于redis集群设置密码的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论