Springboot连接Redis超时问题解决

1.Jedis:
Jedis是同步的,不支持异步,Jedis客户端实例不是线程安全的,需要每个线程一个Jedis实例,所以一般通过连接池来使用Jedis.

优点:

提供了比较全面的 Redis 操作特性的 API
API 基本与 Redis 的指令一一对应,使用简单易理解
缺点:

同步阻塞 IO
不支持异步
线程不安全

2.Lettuce:
Lettuce是基于Netty框架的事件驱动的Redis客户端,其方法调用是异步的,Lettuce的API也是线程安全的,所以多个线程可以操作单个Lettuce连接来完成各种操作,同时Lettuce也支持连接池.

优点:

线程安全
基于 Netty 框架的事件驱动的通信,可异步调用
适用于分布式缓存
缺点:

API 更抽象,学习使用成本高

一、问题出现
在使用SpringBoot整合Redis作为缓存时,一段时间不去操作,再次刷新会出现连接超时的问题,如下:
io.lettuce.core.RedisCommandTimeoutException: Command timed out after 5 second(s)

Redis command timed out; nested exception is io.lettuce.core.RedisCommandTim

二、原因
springboot 2.x 默认采用了lettuce作为连接池,但是lettuce是不会进行“心跳”操作的,也就是说,它不会保持连接,导致了连接超时。

三、解决
我们可以将连接池修改为jedis,jedis是会有“心跳”的。
在pom.xml排除lettuce,并修改为jedis

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </exclusion>
        <exclusion>
            <artifactId>lettuce-core</artifactId>
            <groupId>io.lettuce</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

yml配置

spring:
# redis配置
redis:
  # 地址
  host: 39.99.153.145
  # 端口,默认为6379
  port: 6379
  # 数据库索引
  database: 0
  # 密码
  password: 
  # 连接超时时间
  timeout: 10s
  jedis:
    pool:
      # 连接池中的最小空闲连接
      min-idle: 0
      # 连接池中的最大空闲连接
      max-idle: 8
      # 连接池的最大数据库连接数
      max-active: 8
      # #连接池最大阻塞等待时间(使用负值表示没有限制)
      max-wait: -1ms
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XJF_XH

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

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

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

打赏作者

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

抵扣说明:

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

余额充值