记录lettuce连接池长时间不操作,再次登录报RedisCommandTimeoutException,稍等15分钟又可以正常连接问题

方案一:也是最常见的将lettuce换成jedis连接池

方案一:将lettuce连接池换成jedis连接池

方案二:添加配置
# 连接超时时间
spring.redis.timeout=5000
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=3
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=2
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=3
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1
#在关闭客户端连接之前等待任务处理完成的最长时间,在这之后,无论任务是否执行完成,都会被执行器关闭,默认100ms
spring.redis.lettuce.shutdown-timeout=100

加上这个配置需要配和commons-pools一起使用

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

方案三:自己加上一个心跳机制

@Bean
public ClientResources clientResources(){

    NettyCustomizer nettyCustomizer = new NettyCustomizer() {

        @Override
        public void afterChannelInitialized(Channel channel) {
            channel.pipeline().addLast(
                    new IdleStateHandler(30, 30, 30, TimeUnit.MINUTES));
            channel.pipeline().addLast(new ChannelDuplexHandler() {
                @Override
                public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
                    if (evt instanceof IdleStateEvent) {
                        ctx.disconnect();
                    }
                }
            });
        }

        @Override
        public void afterBootstrapInitialized(Bootstrap bootstrap) {
        }

    };

    return ClientResources.builder().nettyCustomizer(nettyCustomizer ).build();
}

上述三个方案中,第一个是可以但是技术选型固定了,第二种我尝试过反正我这边是没有解决所有尝试第三种方案,第三种方案确实可以解决这个问题,但是会增加客户端压力,心跳监控时间自己需要根据项目去配置。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值