springboot整合redis异常汇总

项目中要用到redis,于是尝试通过springboot整合redis,redis集群采用3主3从,搭建方法参考: https://developer.aliyun.com/article/767317

springboot从2.x版本开始默认使用lettuce访问redis,所以部分配置由jedis改为lettuce

spring.redis.cluster.nodes=ip1:port1,ip2:port2,ip3:port3,ip4:port4,ip5:port5,ip6:port6
#spring.redis.sentinel.nodes=ip1:port1
#spring.redis.sentinel.master=mymaster
# Redis 数据库索引(默认为 0)
spring.redis.database=0
# Redis 服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1  
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8  
# 连接池中的最小空闲连接 
spring.redis.lettuce.pool.min-idle=0    
# 连接超时时间(毫秒)
#spring.redis.timeout=0  这条配置有问题,需要注释掉或者改为500ms

异常1: Cannot retrieve initial cluster partitions from initial URIs [RedisURI [host='192.168.1.1', port=6379]]
这个问题绕了很多弯路,根据网上的很多方案,以为是redis集群配置成了主从模式,但是springboot连接使用的是cluster模式,最后发现问题出在spring.redis.timeout=0这条配置上。
spring.redis.timeout,在1.0中,时间相关的配置参数类型为int,默认单位为毫秒,而且设置为0意味着不超时,2.x版本中参数类型为Duration,需要添加单位,如:500ms

异常2: java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig
添加依赖即可
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.0</version>
</dependency>

异常3:Caused by: io.lettuce.core.RedisCommandExecutionException: CLUSTERDOWN The cluster is down