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

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

环境

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

依赖

     
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

        
            org.apache.commons
            commons-pool2
        

配置

异常:Springboot中redis使用lettuce连接池经常连接超时解决_第1张图片

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

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

3.解决方案如下:

-springboot2.3以上版本,可添加配置解决。
异常:Springboot中redis使用lettuce连接池经常连接超时解决_第2张图片

  • 或者排除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正常

异常:Springboot中redis使用lettuce连接池经常连接超时解决_第3张图片

你可能感兴趣的:(异常,java,SpringBoot,redis,spring,boot,java)