目录
一,原因
Java默认实现redis序列化是通过JDK的序列化策略。这种方式使用比较普遍,直接在项目中创建redis连接然后使用就可以了(这种方式在这里不说明)
就本人来讲是因为在通过以上方式实现之后在项目中出现缓存问题想去通过RedisDesktopManager查看value来查找原因,但是因为JDK的序列化策略是将数据转换成为二进制进行存储导致看不懂,于是就想将存储格式换一种
二,序列化方式对比:
- JdkSerializationRedisSerializer: 使用JDK提供的序列化功能。 优点是反序列化时不需要提供类型信息(class),但缺点是需要实现Serializable接口,还有序列化后的结果非常庞大,是JSON格式的5倍左右,这样就会消耗redis服务器的大量内存。
- Jackson2JsonRedisSerializer: 使用Jackson库将对象序列化为JSON字符串。优点是速度快,序列化后的字符串短小精悍,不需要实现Serializable接口。但缺点也非常致命,那就是此类的构造函数中有一个类型参数,必须提供要序列化对象的类型信息(.class对象)。 通过查看源代码,发现其只在反序列化过程中用到了类型信息。
三,Demo
1,环境搭建 创建一个springboot项目,在这里就不再多说。我在这里是使用spring-boot-starter-test实现的
2,重写RedisTemplate。(想要实现用fastJson序列化redis必须重写) 注意:引入fastjson依赖时使用1.2.54版本以上,不然没有ParserConfig.getGlobalInstance().addAccept("包名");该方法, “包名”自己指定redis所要反序列化的包名称,多个包名使用“,”间隔
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
//使用redis连接池进行连接
redisTempla