一、问题出现
在使用Springcloud整合Redis作为缓存时,一段时间不去操作,再次刷新会出现连接超时的问题,具体如下:
io.lettuce.core.RedisCommandTimeoutException: Command timed out after 5 second(s)
二、原因
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>
基础设置:
spring.redis.host=地址
spring.redis.port=6379
spring.redis.password=
spring.redis.database= 0
spring.redis.timeout=5000
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=2000
#最大阻塞等待时间(负数表示没限制)
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.time-between-eviction-runs=1000