spring-boot Cache redis 类型转换错误

请讲解下,spring-boot Cache redis 类型转换错误
最新回答
夜莺与鲸

2024-06-08 07:44:48

最近在使用spring-boot的Cache功能时,出现了一下奇葩问题
问题现象如下图:

很滑稽的一个问题,相同的类型还出现类型转换错误
项目中的使用情况如下:
缓存配置

缓存使用

缓存使用场景

我们把上面出错的地方单独拿出来

对于这个问题,网上也有人遇到过,但是都说什么是spring-boot devtools工具的问题,感觉挺扯的,我没用这个devtools工具,但是看网上分析的大致可以得出以下结论:
当cache将数据放入缓存时,使用了默认的序列化方式(JdkSerializationRedisSerializer),该序列化使用了二进制保存了对象的上下文ClassLoader,而由于devtools导致服务重启,然后重启后ClassLoad和原来的ClassLoader不是同一个对象了,所以导致对象的Class也不一样,虽然看上去都是User,但是它就是不同的类型,因为它的Class也不相等。
这个就太扯了,我把数据放到缓存中,然后服务器重启了下,再去查缓存就不能用了,那这个缓存有啥用。

解决方案
这个问题肯定是和序列化有关的,我们指定一下缓存value的序列化方式,使用json来序列化对象,配置类的改造如下:

再重启服务,缓存读取出来反序列化后的对象,可以正常使用。
搞定!!!