高性能序列化和反序列化以在redis中缓存对象

时间:2014-12-17 20:37:29

标签: java serialization redis jackson

我们正在编写一个带有jax-rs的REST服务,我们正在缓存数据库实体(javax.persistence.Entity),即在redis服务器中对数据库中表的对象表示。在将对象放到redis之前,我们通过jackson将对象序列化为json,当我们需要实体对象时,我们在从redis获取后对其进行反序列化。

我想知道是否有更快/更高效的方式进行序列化和反序列化。如果有人建议采用更高效的方式而不将对象转换为像json这样的人类可读格式,并且我也不想要内部语言的互操作性,那我就没问题了。

如果有人需要更多详情,请告诉我。感谢。

3 个答案:

答案 0 :(得分:2)

有很多很多用于在Java中序列化对象的库。例如,JVM Serializers基准包括两十几个左右。

如果这是主要关注点,那么有助于您获得更快序列化的一些事情:

对于JSON,杰克逊是最快的,虽然在某些情况下其他人(Boon,fastjson)可以更快,但你真的需要对你的特定用例进行基准测试,以了解你的用户是否是一个。但即便如此,差异也不大可能。

答案 1 :(得分:1)

如果您最终需要所有实体作为JSON,那么您的方法就可以了,否则Robert已经指出使用默认序列化

根据这些基准测试,jackson比java序列化更快: benchmark

如果你使用jackson,我唯一记得的是ObjectMapper的创建是昂贵的。 jackson

要获得最后一点,你应该将其他json序列化器/解析器与jackson进行比较,例如:恩惠很快。 boon

答案 2 :(得分:1)

如果您使用MessagePack,您可以在Redis Lua脚本中获得支持,因此您可以执行诸如从Redis获取单个字段而不将整个对象传回客户端的操作。但是我的Java知识非常有限,所以我不知道MessagePack是否是Java对象的可行序列化格式。