redis一个优点就是可以将数据写入到磁盘中。
我们知道写入磁盘的数据实际上都是以字节(0101这样的二进制数据)的形式写入的。
这意味着如果我们要将一个对象写入磁盘,就必须将这个对象序列化。
java的序列化机制可以参考这篇文章。
可以看到java的反序列是否成功跟serialVersionUID有很大的关系,自动生成的UID在每次编译时就会发生变化。
如果有两个程序共享一个redis,这个时候反序列化就会出现问题。
spring-data-redis的序列化类有下面这几个:
1.JacksonJsonRedisSerializer: 序列化object对象为json字符串
如果需要保存对象为json的话推荐使用JacksonJsonRedisSerializer,它不仅可以将对象序列化,
还可以将对象转换为json字符串并保存到redis中,但需要和jackson配合一起使用。
用JacksonJsonRedisSerializer序列化的话,被序列化的对象不用实现Serializable接口。
Jackson是利用反射和getter和setter方法进行读取的,如果不想因为getter和setter方法来影响存储,就要使用注解来定义被序列化的对象。
Jackson序列化的结果清晰,容易阅读,而且存储字节少,速度快,推荐。
2.JdkSerializationRedisSerializer: 序列化java对象(Jackson2JsonRedisSerializer同)
用JdkSerializationRedisSerializer序列化的话,被序列化的对象必须实现Serializable接口。在存储内容时,除了属性的内容外还存了其它内容在里面,总长度长,且不容易阅读。
3,使用StringRedisSerializer序列化
一般如果key-value都是string的话,使用StringRedisSerializer就可以了
4.GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化