BladeX和BladeX-Biz存到redis里面的值,无法相互获取,会出现反序列异常

Blade 未结 1 804
xch
xch 剑童 2021-09-15 11:10

一、该问题的重现步骤是什么?

  1.  在bladeX项目里面调用方法SysCache.getTenant("4413");可以正常把tenant对象存到redis里面,也可以正常反序列化取出值,存到redis里面的数据格式如下图所示:

    image.png

  2. 在BladeX-Biz项目的pom.xml文件里面引用blade-system-api依赖来调用SysCache.getTenant("4413");发现获取不到redis里面对应的值,会  自动远程调用blade-system方法来获取成功之后存到redis里面,把bladeX项目里面存的值给覆盖掉,变成这样就可以正常从缓存里获取到值,

image.png

但是在bladeX项目里面调用SysCache.getTenant("4413");就会出现反序列异常:

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.StreamCorruptedException: invalid stream header: 0BFA0724 at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:84) at org.springframework.data.redis.serializer.DefaultRedisElementReader.read(DefaultRedisElementReader.java:48) at org.springframework.data.redis.serializer.RedisSerializationContext$SerializationPair.read(RedisSerializationContext.java:226) at org.springframework.data.redis.cache.RedisCache.deserializeCacheValue(RedisCache.java:260) at org.springframework.data.redis.cache.RedisCache.lookup(RedisCache.java:94) at org.springframework.cache.support.AbstractValueAdaptingCache.get(AbstractValueAdaptingCache.java:58) at org.springblade.core.cache.utils.CacheUtil.get(CacheUtil.java:188) at org.springblade.core.cache.utils.CacheUtil.get(CacheUtil.java:168) at org.springblade.system.cache.SysCache.getTenant(SysCache.java:324) at org.springblade.article.wrapper.ArticleWrapper.entityVO(ArticleWrapper.java:63) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) at org.springblade.article.wrapper.ArticleWrapper.articleListVO(ArticleWrapper.java:57) at org.springblade.article.wrapper.ArticleWrapper.articlePageVO(ArticleWrapper.java

二、你期待的结果是什么?实际看到的又是什么?

期望通过SysCache.getTenant("4413");缓存到redis里面的值可以正常在bladeX和Bladex-Biz项目正常获取到

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

2.6.0.RELEASE,在windows上面,redis版本redis:5.0.2-alpine


1条回答
  • 2021-09-15 11:32

    查一下biz的工程有没有引入blade-starter-redis并且生效,双方配置是否都一致。如果都引入后还是不行,麻烦发一个邮件到bladejava@qq.com附上详细的重现步骤,我们跟着调试重现。

    作者追问:2021-09-15 11:41

    配置都一样,步骤上面已经很详细了,在BladeX-Biz项目的pom.xml文件里面引用blade-system-api依赖来调用SysCache.getTenant("4413");发现获取不到redis里面对应的值,会 自动远程调用blade-system方法来获取成功之后存到redis里面,把bladeX项目里面存的值给覆盖掉,redis两次存的值上面截屏有,一长一短

    0 讨论(0)
提交回复