Spring-data-redis 反序列化异常

环境:
1. 在做和客户的一个对接项目中,需要从客户的redis缓存中取一些基础数据,遇到了一些问题,在此记录:
2. 环境:
spring-data-redis(客户:2.0.7,我方:1.8.9)
spring-core:(客户:不知,我方:4.3.8)
心路历程:
1. 查看日志,里面确实有反序列化异常,然后,确认双方的序列化方式和反序列化方式对应关系,确定都是使用的spring-data-redis的默认序列化和反序列化;

org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.InvalidClassException: org.springframework.util.LinkedCaseInsensitiveMap; local class incompatible: stream classdesc serialVersionUID = 7585587129342584356, local class serialVersionUID = 3417330771149596951
at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:82)
    at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:318)
    at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:58)
  1. 怀疑是我方项目中的其他组件和spring-data-redis中的依赖有冲突,挨个排查,发现并没有(这里可以使用idea查看pom文件的以来关系来确认)
  2. 后来查一篇博客,发现了一点问题。博客地址:http://976861.blog.163.com/blog/static/10295810020129172026291/
    还有一篇博客,也不错,记录一下:http://cuiweiqing1988.iteye.com/blog/1907955
    再附上一份关于java序列化版本号的说明:https://www.cnblogs.com/guanghuiqq/archive/2012/07/18/2597036.html
  3. 后来怀疑可能是spring-core包版本的问题,索性写了一个spring-boot项目,测试了spring-core:4.3.8和4.3.13以及5.0.6三个版本的,通过测试,4.3.8的获取数据进行反序列化的时候,会抛异常。
  4. so,问题大概知道了,就解决吧。因为之前试过把spring-core以来同意上升到5.0.6,但是其他依赖(Hibernate)会报错。所以,就将版本升到了4.3.13,通过测试,ok。
  5. 总结一下
其实很简单,就是由于双方spring的依赖版本差异引起的,可以尽可能缩小差异(在本身项目允许的情况下)或者干脆两者使用统一版本;

好了,我就是自己记录一下,这个坑了我两天的问题。。。希望能对大家有所帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值