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

Blade 未结 1 976
广东恒电
广东恒电 剑圣 2021-09-14 09:25
悬赏: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:11

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

    0 讨论(0)
提交回复