Redis - 将数据存储到Redis :: JSON字符串或序列化pojo中的方法

时间:2013-11-09 05:42:56

标签: java json serialization redis

我有一个如下课程:

   public class Person
      {
         public String name;
         public String age;
      }

我对将Perons Map保存到Redis的方法感到困惑:

我应该使用java序列化/反序列化对象方法,还是应该尝试转换为JSON然后存储,反之亦然。

对下面提到的观点有任何想法:

  • 序列化和反序列化的成本VS映射到Java和JSON的成本
  • 内存对Redis的JSON和序列化对象的要求
  • 压缩:流与数据

    我们应该采用哪种压缩方式   虽然DATA压缩看起来有点困难(不太有用),因为我们正在使用Redish Hash

一些假设是:

  • pojo包含许多instancd变量
  • 将使用Redis哈希来存储对象

2 个答案:

答案 0 :(得分:3)

您应该考虑使用MessagePack,因为它与Redis和Lua完全兼容,这是对JSON的一个很好的压缩:http://msgpack.org/

它意味着要压缩和解压缩一些Lua代码,但成本应该很小。以下是一个示例:http://gists.fritzy.io/2013/11/06/store-json-as-msgpack

有一个缺少数据的小基准:https://gist.github.com/muga/1119814

仍然它应该是一个很好的选择,因为你可以使用不同的语言,完全支持redis,它基于JSON。

答案 1 :(得分:1)

答案是您应该针对您的使用案例和环境进行衡量。我首先尝试JSON,因为它更通用,更少问题 - 即更容易调试和恢复损坏的数据。

性能。 JSON序列化速度很快,因此在许多情况下它不会成为您的瓶颈。最有可能是磁盘或网络IO:java serialization benchmarking。避免使用默认的Java序列化,因为它很慢。 Kryo是二进制输出的选项。如果您需要二进制格式的多个平台,请考虑DB的内部格式或Google Protobuffers。

压缩。在Google中,他们使用Snappy来减少对cpu的压缩。 Snappy也用于Cassandra,Hadoop和Hypertable。 JVM压缩器的一些基准:Compression test using Calgary corpus data set