spring-boot Cache redis 类型转换错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-boot Cache redis 类型转换错误相关的知识,希望对你有一定的参考价值。

参考技术A

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

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

缓存使用

缓存使用场景

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

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

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

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

以上是关于spring-boot Cache redis 类型转换错误的主要内容,如果未能解决你的问题,请参考以下文章

shiro中CacheManager相关的类结构介绍,提供redis Cache实现

php redis增删改查的操作类库

共享一个redis增删改查的操作类库

mybatis+redis实现二级缓存

从零开发短视频电商 缓存Cache实战SimpleCaffeine和Redis多缓存管理器

Python操作redis