redis中是否始终需要protobuf?

use*_*860 4 java protocol-buffers redis

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

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

很多重点是这个产品的效率,所以我们不想做任何不必要的处理.

Mar*_*ell 11

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

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

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

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

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

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