2018年公司新项目,使用的最新版本的redisson-3.8.2,然而在后期运行当中,出现了一些问题,问题如下:
1、重新尝试报错,导致本地系统无法提供服务:
通过在redisson github搜索,找到回答如下:
2、org.redisson.client.RedisConnectionClosedException: Command succesfully sent, but channel [id: 0x5d21d51b, L:/10.5.86.5:35034 ! R:10.55.4.110/10.55.4.1
这个bug刚好发生在我们用的3.8.2版本,在3.10.X版本已经修复。
通过查看最新版本3.10.7的源码,发现与3.8.2的区别还在于,问题1中说到的两个参数 threads和nettyThreads也已经优化了,不再是3.8.2默认的0。
所以我们使用的redisson有必要升级以解决现有的问题。
3、升级步骤
(1)在pom.xml文件中,将
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.8.2</version>
</dependency>
替换为
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.10.7</version>
<exclusions>
<exclusion>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-21</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-20</artifactId>
<version>3.10.7</version>
</dependency>
PS:为何要改成这么长?改个版本号不就好了吗?
因为redisson-2.10.7版本默认整合的是springboot 2.1.X版本,然而我们工程使用的是springboot-2.0.5RELEASE版本,所以不兼容,项目虽然能编译通过,但启动会报java.lang.AbstractMethodError: org.redisson.spring.data.connection.RedissonReactiveRedisConnection.close()V这个错,这是因为下面三张图中,图一用到的connetcion.close()方法,在redisson-spring-data-21中,已经被去掉,redisson-spring-data-20中是有的,虽然是空实现,所以我们需要把默认的依赖去掉,再次依赖redisson-spring-data-20版本:
(2)修改config类,覆盖默认的序列化类
在redisson3.10.7中,使用的默认的Decoder不再是Jackson了,如图:</pre>
可以看出,这个是用的java序列化来做decoder了,所以如果我们之前写得代码中,保存的对象,不实现Serializable,就会编解码失败。所以为了使用json序列化,我们还是要把序列化方式改回成Jackson。
修改后的Config类的内容为:
4、注意事项
版本升级后,一些使用会有修改,比如Topic的使用;请及时关注官方wiki,地址为:https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95