Lettuce连接池、druid连接池超时问题

目录

版本

springboot

druid版本

Lettuce版本

问题排查

问题来源

使用skywalking

正常响应结果

异常结果

我的redis配置如下

解决方案

Lettuce最终超时解决方案

druid连接超时解决方案


版本

springboot

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
    </parent>

druid版本

起初使用druid1.2.22版本因为idea无配置提示后来升级至1.2.24

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.24<version>
        </dependency>

Lettuce版本

springboot 2.7.18自带版本

问题排查

问题来源

当系统运行一段时间不调任何接口,再次发起请求时接口直接挂掉了,并且很长才能恢复,于是就开始各种找资料,后来看到有一个帖子也有类似问题并且使用链路追踪查看接口调用链分析,所以便想着也开搞吧,,毕竟半天定位不到是哪里的问题,最后发现时由于Lettuce和druid连接超时引起的。

使用skywalking

具体步骤请查看  skywalking,我是直接监控的gateway(在网关做了统一鉴权),所以探针包还需要加上 gateway配置,子服务启动也要加上探针

于是便有了下面这张接口调用结果

正常响应结果

先鉴权再执行接口

无论是lettuce,还是druid获取连接时间都正常

异常结果

一段时间未发起任何数据库请求后

我们可以看到这个Lettuce从连接池获取时间花了10004ms ,直接卡在这里了,也没有执行下一步路由

我的redis配置如下

官网说法

RedisCommandTimeoutException

最后看了好多帖子 还是没找到最有效的方法    还是参考这个吧  Lettuce连接超时问题 

解决方案

Lettuce最终超时解决方案
@Configuration
@Slf4j
@EnableScheduling
public class RedisScheduleTask {


    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 测试redis是否正常 每分钟执行一次
     */
    @Scheduled(fixedRate = 60*1000)
    private void configureTasks() {
        redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(@NotNull RedisConnection connection) throws DataAccessException {
                return connection.ping();
            }
        });
    }

}

修改配置之后未再次发现连接超时情况

接着是druid连接超时问题

我们可以看到druid获取连接花了 57637ms  ,又裂开了哈哈

druid连接超时解决方案

加上这几个配置即可解决

官方配置参考 DruidDataSource配置属性列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W先生'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值