Redis缓存Java对象的问题

一个java bean 我知道有两种序列化方案
1、使用Json序列化为字符串
2、使用ObjectOutputStream 序列化为byte[]

不知道各位是使用哪种方式进行序列化存储的?各有什么优缺点

我先抛砖引玉

使用Json序列化

优点:缓存数据便于查阅,都是String字符串
缺点:java bean对象修改后,之前存储的数据,反序列化时会对新增字段赋予默认值,往往会带来业务逻辑上的问题

使用ObjectOutputStream序列化

优点:可以通过serialVersionUID控制版本号,如果bean对象发生修改,反序列化不会成功,能够有效避免上面的缺点
缺点:存储结果不便于查阅

阅读 12k
3 个回答

序列化需要考虑到的问题有很多,针对这些问题也有很多序列化方案可以选择。
但是根据场景不同,有些问题可以选择忽略。
这里有一篇很好的测试,希望对题主有帮助:https://github.com/eishay/jvm-serializer...

org.springframework.data.redis.serializer.JdkSerializationRedisSerializer
默认的貌似是这个序列化吧?用默认的就好。

json的话反序列化对于泛型的集合并不是十分试用,java自身的序列化又比较沉重比较慢,也不是很理想,所以请考虑protobuf之类的序列化框架。实际使用,效果还是很理想的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题