异常:Springboot中redis使用lettuce连接池经常连接超时解决

文章讲述了在Springboot2.4.4环境下,使用Lettuce作为Redis连接池遇到的连接超时问题。问题出现在长时间无操作后Redis自动断线,导致`RedisCommandTimeoutException`。分析指出Lettuce的连接池策略会主动断开空闲连接。解决方案包括升级Springboot版本并添加特定配置,或者切换到Jedis库。应用这些解决方案后,Redis连接恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Springboot中redis使用lettuce连接池经常连接超时解决

环境

Springboot 2.4.4 + mysql 
redis使用 lettuce作连接池

依赖

     <!--springboot中的redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

配置

在这里插入图片描述

1. 问题点:项目启动后,一段时间过后redis自动掉线
io.lettuce.core.RedisCommandTimeoutException: Command timed out
2. 问题分析:

这是lettuce-core的实现里,有类似心跳机制的保持长连接方式,不过心跳机制是不停的来回发心跳包直到连接不可用再去被动重新连接,而lettuce的方案是将连接池里处于空闲(idle)状态的client每隔一段时间就主动断开,然后再重新连接。

3.解决方案如下:

-springboot2.3以上版本,可添加配置解决。
在这里插入图片描述

  • 或者排除lettuce,采用jedis。
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
			<exclusions>
				<exclusion>
					<groupId>io.lettuce</groupId>
					<artifactId>lettuce-core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>


结果:redis正常

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值