文档章节

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

Mr_李辉
 Mr_李辉
发布于 2016/03/15 12:05
字数 254
阅读 962
收藏 2

网络通信中经常使用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());



© 著作权归作者所有

Mr_李辉
粉丝 0
博文 8
码字总数 1415
作品 0
哈尔滨
高级程序员
私信 提问
protobuf,json,xml,binary,Thrift之间的对比

golang 使用 protobuf 的教程 golang使用protobuf 一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,总体看来ProtoBuf的优势还是很明...

mickelfeng
2018/11/19
452
0
几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据

别人的相关测试数据: http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking 测试纬度 序列化时间 反序列化时间 bytes大小 测试代码 准备protobuf文件 Message.proto文件代码...

SANSOM
2015/08/20
413
0
【专栏精选】网络封包神器protobuf简介

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/zhenghongzhi6/article/details/94589294 本文节选自洪流学堂公众号技...

关尔Manic
07/03
0
0
采用protobuf降低redis的内存使用

Redis的当前数据存储在内存中,由于内存并不象硬盘一样有着很大的空间,对于服务器来说一般只会提供16G或32G内存。所以让Redis使用这些内存存储更多的数据是比较重要的。在使用redis的sampl...

泥水佬
2013/08/19
4.5K
2
Netty with protobuf(一)

Netty with protobuf 这是一篇关于netty和protobuf2的文章,先来介绍一下protobuf的简单使用。网上有很多基本的protobuf的介绍,这里就不在赘述了。 protobuf官网上提供了一个例子,我们就拿...

秋风醉了
2014/07/26
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部