hiredis 保存protobuf序列化后的二进制数据

网络通信中经常使用protobuf对结构化数据做序列化,如将 Usr 对象序列化成字符串类型,使用protobuf的SerializeToString函数,这个函数如下:

bool SerializeToString(string* output) const//序列化消息,字节保存在string中。注意字节是二进制,而非文本;

hiredis使用redisCommand函数存储和访问数据,如果直接使用redisCommand(_ctx, "SET %s %s", key.c_str(), value.c_str())保存value的值有可能导致数据不完整,原因是pb序列化之后的string中保存的是二进制数据,可能导致c_str()方法返回的c字符串被二进制0值截断,造成数据不完整。 

解决的办法:

hiredis提供了%b,作为格式化二进制的方法,二进制数据需要提供起始地址和长度。

redisCommand(_ctx, "SET %s %b", key.c_str(), value.data(), value.length());



你可能感兴趣的:(hiredis 保存protobuf序列化后的二进制数据)