前言
最近项目中涉及到session共享,于是想把session存到redis中,于是引入spring-data-session-redis这个依赖,但引入就报反序列化异常。查看项目中redis的代码,发现用的是StringRedisTemplate
这个对象,那么先来了解一下RedisTemplate和StringRedisTemplate区别,再来解决下步问题。
区别
RedisTemplate和StringRedisTemplate功能类似者是封装了一些对redis的操作。区别就是于他们序列化的方式不一样
- RedisTemplate使用的是 JdkSerializationRedisSerializer
- StringRedisTemplate使用的是 StringRedisSerializer
RedisTemplate使用的序列类在在操作数据的时候,会将数据先序列化成字节数组然后在存入Redis数据库,这个时候打开Redis查看的时候,你会看到数据是以字节形式存储的,你根本看不到懂里面存的什么。
当然从Redis获取数据的时候也会默认将数据当做字节数组转化,这样就会导致一个问题,当需要获取的数据不是以字节数组存在redis中,就会无法获取数据。
所以当你要解决反序列化异常的时候,首先要清楚你项目中用的是哪个redis对象操作的redis库,然后再修改redis对象序列化方式和sping session redis的序列化方式一样。