redis lettuce连接池经常出现连接拒绝(Connection refused)问题解决

 更新时间:2025年03月06日 09:20:54   作者:青龙老贼  
本文主要介绍了在Windows 10/11系统中使用Spring Boot和Lettuce连接池访问Redis时,遇到的连接拒绝问题,下面就来介绍一下解决方法,感兴趣的可以了解一下

一.软件环境

windows10、11系统、springboot2.x、redis 6 7

linux(centos)系统没有出现这问题,如果你是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: 0
      cluster:
        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服务端连接不到就把连接干掉了,而lettuce并不知道连接已经断开了,当有请求需要连接redis时,就从lettuce中拿一个已经被服务端断开连接去操作redis,于是就得到了连接拒绝的响应。

四.解决方案

方案 1:减少redis服务端配置文档的tcp-keepalive的间隔时间,将上图中的设置改为60后,重启服务,经过测试就没有连接拒绝的问题了。

方案2:增加windows系统的tcp/ip连接的存活时间,但是这个修改过几个配置,好像没有效,也有说法是防火墙、杀毒软件的防护策略等管理着tcp/ip的存活时间。如不可用,建议直接使用方案1。

到此这篇关于redis lettuce连接池经常出现连接拒绝(Connection refused)问题解决的文章就介绍到这了,更多相关redis lettuce连接池连接拒绝内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解redis_memcached失效原理(小结)

    深入理解redis_memcached失效原理(小结)

    这篇文章主要介绍了深入理解redis_memcached失效原理(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • RedisTemplate常用方法大全(面试必备)

    RedisTemplate常用方法大全(面试必备)

    RedisTemplate是SpringData Redis提供的一个类,本文主要介绍了RedisTemplate常用方法大全,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • redis删除指定key的实现步骤

    redis删除指定key的实现步骤

    本文主要介绍了redis删除指定key的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Redis性能监控的实现

    Redis性能监控的实现

    本文使用 redis_exporter + prometheus +grafana 实现对Redis服务进行监控,原因:成本低,人工干预少,感兴趣的可以了解一下
    2021-07-07
  • Redis突现拒绝连接问题处理方案

    Redis突现拒绝连接问题处理方案

    这篇文章主要介绍了Redis突现拒绝连接问题处理方案,分析原因是由于redis与业务共一个服务器,内存只有8G,业务服务启动过多,内存不足导致redis拒绝连接,需要的朋友可以参考下
    2024-02-02
  • Linux、Windows下Redis的安装即Redis的基本使用详解

    Linux、Windows下Redis的安装即Redis的基本使用详解

    Redis是一个基于内存的key-value结构数据库,Redis 是互联网技术领域使用最为广泛的存储中间件,这篇文章主要介绍了Linux、Windows下Redis的安装即Redis的基本使用详解,需要的朋友可以参考下
    2022-09-09
  • Redis为什么默认有16个数据库问题

    Redis为什么默认有16个数据库问题

    这篇文章主要介绍了Redis为什么默认有16个数据库问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 一文搞懂Redis中String数据类型

    一文搞懂Redis中String数据类型

    string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。今天通过本文给大家介绍下Redis中String数据类型,感兴趣的朋友一起看看吧
    2022-04-04
  • Redis安全策略详解

    Redis安全策略详解

    缓存穿透是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。用户拿不到数据时,就会一直发请求,查询数据库,这样会对数据库的访问造成很大的压力
    2022-07-07
  • Redis实现短信登录的企业实战

    Redis实现短信登录的企业实战

    本文主要介绍了Redis实现短信登录的企业实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论