我正在使用redis开发一个键值存储。我建议使用hashmap
类型String(key)-->Object(value)
。建议我使用serilaize
protobuf
对象protobuf
。
如果我们要使用Java(与平台无关)来填充和读取这些数据,那么使用{{1}}是否有任何优势?只是将对象直接放入redis并将其取回并投射它会导致任何问题吗?
很多重点都放在这个产品的效率上,所以我们不想做任何不必要的处理。
答案 0 :(得分:11)
绝对不需要使用带有redis的protobuf;关键通常很简单:选择一个序列化框架,可以在今天,明天和明年可靠地获取数据。您也可以使用json,xml等。在许多情况下,单个字符串值绰绰有余,完全绕过序列化(除非您将“编码”计算为序列化)。
我通常建议不要使用平台专有的序列化,因为如果你需要在几年内将数据恢复到(例如)C ++中,它们可能无法帮助你,而且它们在版本控制方面通常不太灵活。
Protobuf是一个合理的选择,因为它具有以下关键特征:
但是,其他序列化程序也可以。您甚至可以使用纯文本和redis哈希,即每个对象属性的哈希属性。但是,在大多数情况下,您希望获得整个对象,因此简单的“获取”并将数据交给合适的序列化API通常更合适。
在我们自己使用的redis中,我们做碰巧使用protobuf,但我们也做了一个推测“protobuf输出是否用gzip压缩?” - 如果是,我们发送gzip数据(或者我们存储原始的未压缩数据,如果更小 - 显然是一个标记,说明它是什么)。