原先配置是使用默认Lettuce。后来在生产环境发现会经常的超时,导致缓存不可用,而且一超时就不恢复。
后来查了些资料,网上都有这个问题,无解,都建议使用jedis。
先看下原来的配置,maven配置(项目其他配置已省略)
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-redis</artifactId><version>2.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.0.0.RELEASE</version><exclusions><exclusion><groupId>redis.clients</groupId><artifactId>jedis</artifactId></exclusion></exclusions></dependency>
application.yml配置:
spring:redis:database: 15 # Redis数据库索引(默认为0)host: 10.10.10.43 # Redis服务器地址port: 6379 # Redis服务器连接端口password: # Redis服务器连接密码(默认为空)timeout: 5000 # 连接超时时间(毫秒)pool:max-active: 8 # 连接池最大连接数(使用负值表示没有限制)max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)max-idle: 8 # 连接池中的最大空闲连接min-idle: 0 # 连接池中的最小空闲连接
会一直报错org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 500 millisecond(s)。
后来改配置,maven如下:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-redis</artifactId><version>2.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.0.0.RELEASE</version><exclusions><!-- <exclusion><groupId>redis.clients</groupId><artifactId>jedis</artifactId></exclusion> --><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>
application.yml配置:
spring:redis:database: 15 # Redis数据库索引(默认为0)host: 10.10.10.43 # Redis服务器地址port: 6379 # Redis服务器连接端口password: # Redis服务器连接密码(默认为空)timeout: 5000 # 连接超时时间(毫秒)jedis:pool:max-active: 300max-idle: 100min-idle: 0max-wait: -1ms
总的来说是放弃了Lettuce ,使用jedis,问题能够得到解决。