SpringBoot2.x 整合 Redis 采坑记录
背景介绍
- 公司最近的新项目在进行技术框架升级,基于的Spring Boot的版本是2.1.4,整合Redis数据库。网上基于2.X版本的整个Redis少之又少,中间踩了不少坑,特此把整合过程记录,以供小伙伴们参考。
- 本文的基于在于会搭建Spring Boot项目的基础上进行的,入门是小白的话,请自行学习相关基础知识,网上或相关书籍很多。
- 由于我本人对Maven比较熟悉,所以是以Maven进行的。Gradle类似,核心思想都是一样的,实现项目管理工具不同而已。
采坑记录
- 这里先给出部分pom文件
<!-- Spring Boot Redis依赖 -->
<!-- 注意:1.5版本的依赖和2.0的依赖不一样,注意看哦 1.5我记得名字里面应该没有“data”, 2.0必须是“spring-boot-starter-data-redis” 这个才行-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 1.5的版本默认采用的连接池技术是jedis 2.0以上版本默认连接池是lettuce, 在这里采用jedis,所以需要排除lettuce的jar -->
<exclusions>
<exclusion>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</exclusion>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加jedis客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!--spring2.0集成redis所需common-pool2-->
<!-- 必须加上,jedis依赖此 -->
<!-- spring boot 2.0 的操作手册有标注 大家可以去看看 地址是:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.5.0</version>
</dependency>
<!-- 将作为Redis对象序列化器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
注意pom文件中的注释。SpringBoots2.X以上版本默认连接池是lettuce,博主项目内redis使用的是集群,然后在dev环境中跑项目时,lettuce居然会解析出reids内网地址进行通信。虽然核心功能不受影响,但初次连接redis时速度极慢,而且会报出一大堆
redis collection time out
异常。最终博主跟踪reids连接解析源码发现它的连接池我我们常用的jedis不一致,这才找出了报错的源头。
后记
博主这是给出了解决方案,但为什么lettuce连接池会通过外网地址解析出内网ip博主无从而知,跟踪源码也没得出个所以然。如果有对lettuce熟悉的朋友欢迎联系博主进行指正。