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正常
版权归原作者 夕夕夕兮 所有, 如有侵权,请联系我们删除。