我们正在编写一个带有jax-rs
的REST服务,我们正在缓存数据库实体(javax.persistence.Entity
),即在redis服务器中对数据库中表的对象表示。在将对象放到redis之前,我们通过jackson
将对象序列化为json
,当我们需要实体对象时,我们在从redis获取后对其进行反序列化。
我想知道是否有更快/更高效的方式进行序列化和反序列化。如果有人建议采用更高效的方式而不将对象转换为像json这样的人类可读格式,并且我也不想要内部语言的互操作性,那我就没问题了。
如果有人需要更多详情,请告诉我。感谢。
答案 0 :(得分:2)
有很多很多用于在Java中序列化对象的库。例如,JVM Serializers基准包括两十几个左右。
如果这是主要关注点,那么有助于您获得更快序列化的一些事情:
Smile
或CBOR
。这些不是开发人员可读的,但占用的空间更少,处理速度更快,也可以从其他语言中读取(即不是Java特定的)对于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对象的可行序列化格式。