hiredis 保存protobuf序列化後的二進制數據

網絡通訊中常用protobuf對結構化數據作序列化,如將 Usr 對象序列化成字符串類型,使用protobuf的SerializeToString函數,這個函數以下:
web

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值截斷,形成數據不完整。 
redis

解決的辦法:網絡

hiredis提供了%b,做爲格式化二進制的方法,二進制數據須要提供起始地址和長度。函數

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


spa

相關文章
相關標籤/搜索