Redis中的序列化
Redis中的序列化为什么要序列化:序列化最终的目的是为了对象可以跨平台存储,和进行网络传输,凡是需要进行“跨平台存储”和”网络传输”的数据,都需要进行序列化。
RedisTemplate默认使用的是JdkSerializationRedisSerializer
StringRedisTemplate默认使用的是StringRedisSerializer
Spring Data JPA为我们提供了下面的Serializer:
1 . GenericToStringSerializer
2 . Jackson2 JsonRedisSerializer
3.JacksonJsonRedisSerializer
4 . JdkSerializationRedisSerializer
5 . OxmSerializer
6 . StringRedisSerializer
序列化方式对比:
JdkSerializationRedisSerializer :
使用JDK提供的序列化功能。
优点是反序列化时不需要提供类型信息( class ),
但缺点是需要实现Serializable接口,
还有序列化后的结果非常庞大,是JSON格式的5倍左右,
这样就会消耗redis服务器的大量内存。
Jackson2 JsonRedisSerializer:
使用Jackson库将对象序列化为JSON字符串。
优点是速度快,序列化后的字符串短小精悍,不需要实现Serializable接口。
但缺点也非常致命,那就是此类的构造函数中有一个类型参数,
必须提供要序列化对象的类型信息( .class对象)。
通过查看源代码,发现其只在反序列化过程中用到了类型信息。