redis中是否始终需要protobuf?

时间:2012-06-06 10:11:20

标签: java redis protocol-buffers

我正在使用redis开发一个键值存储。我建议使用hashmap类型String(key)-->Object(value)。建议我使用serilaize protobuf对象protobuf

如果我们要使用Java(与平台无关)来填充和读取这些数据,那么使用{{1}}是否有任何优势?只是将对象直接放入redis并将其取回并投射它会导致任何问题吗?

很多重点都放在这个产品的效率上,所以我们不想做任何不必要的处理。

1 个答案:

答案 0 :(得分:11)

绝对不需要使用带有redis的protobuf;关键通常很简单:选择一个序列化框架,可以在今天,明天和明年可靠地获取数据。您也可以使用json,xml等。在许多情况下,单个字符串值绰绰有余,完全绕过序列化(除非您将“编码”计算为序列化)。

我通常建议不要使用平台专有的序列化,因为如果你需要在几年内将数据恢复到(例如)C ++中,它们可能无法帮助你,而且它们在版本控制方面通常不太灵活。

Protobuf是一个合理的选择,因为它具有以下关键特征:

  • 小输出(减少app和redis之间的带宽以及存储要求)
  • CPU高效处理(减少应用中的处理)
  • 专为版本容差而设计
  • 跨平台

但是,其他序列化程序也可以。您甚至可以使用纯文本和redis哈希,即每个对象属性的哈希属性。但是,在大多数情况下,您希望获得整个对象,因此简单的“获取”并将数据交给合适的序列化API通常更合适。

在我们自己使用的redis中,我们碰巧使用protobuf,但我们也做了一个推测“protobuf输出是否用gzip压缩?” - 如果是,我们发送gzip数据(或者我们存储原始的未压缩数据,如果更小 - 显然是一个标记,说明它是什么)。