关键字:Jedis RedisTemplate GeoUnit
关联项目:精益编程框架
关联类:com.leanboot.vredis.RedisConfig.java
一、背景
精益编程框架系统,在整合最新的redis的时候,采用Jedis作为redis的客户端,结果发生了一连串的错误。
1.背景知识
- Jedis是Redis官方推荐的面向Java的操作Redis的客户端
- Jedis具有自己的一套操作redis的封装api,例如连接池等
- Jedis也是具有自己一定的生态,版本更新迭代还是挺快的,截止今天2022-10-08,最新版本4.2.3,最新信息请查看: https://github.com/redis/jedis
- SpringBoot采用springDataRedis来操作redis,而RedisTemplate是springDataRedis对JedisApi的高度封装
总的来说:Springboot整合redis有两种方式:Jedis与RedisTemplate
2.引入redis与jedis的错误配置
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.3</version>
</dependency>
错误提示
构建连接工厂JedisConnectionFactory初始化的时候,(项目启动)发生以下异常:
java.lang.NoClassDefFoundError: redis/clients/jedis/GeoUnit
错误分析:
- 直接引用了Jedis的最新版本,对于spring data redis未知是否支持这个版本;
- Jedis从3to4的版本升级中,GeoUnit删掉了,官方说明如下:
https://github.com/redis/jedis/blob/master/docs/3to4.md
3.错误处理
正常的使用方法是:把Jedis的版本号去掉
<!--redis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<!--<version>4.2.3</version>-->
</dependency>
springboot所谓的自动配置,无论是版本怎么迭代,其实内部有一个机制,对于一些特殊的第三方jar包,就是有一个默认的关联的版本号;
从idea或者eclipse中,打开pom.xml中,直接按住ctrl + 单击”
就能打开,查看关联的Jedis的版本号;如我目前使用的是:springboot 2.7.4,关联的jedis的版本号为:
二、总结
- 有时候,关联第三方的jar包,并不是越新越好
- 会用小技巧与一定的度娘搜索技巧,能快速定位你的问题