分类: NOSQL
2015-02-06 12:48:41
google protocol buffer 可以将对象序列化,而redis作为优秀的NOSQL数据库,这里我将以实例方式介绍,将C++对象序列化,并存放在redis数据库中!
google protocol buffer 的安装以及基础使用可以阅读我上一片文章.
redis的安装使用,可以查阅,这里不再描述.我使用redis的官方C client: hiredis.
protobuf 对象模型:
创建工程:
在生成对应的model.pb.h model.pb.cc 更多请阅读我上一篇文章.
将hiredis.h以及依赖库引入项目中.这里以静态链接库形式 /usr/lib/libhiredis.a
编写main,cpp
首先:
[root@localhost ~]# redis-cli -p 3307
redis 127.0.0.1:3307> DEL Jack
(integer) 1
redis 127.0.0.1:3307>
运行第一个注释,将对象写入redis:
byteSize = 124
SET (binary API): OK
0
这里已经成功将User u的对象写入到redis中了,我们可以通过redis查看:
redis 127.0.0.1:3307> GET Jack
"\b\x01\x12\x04Jack\x1a\x06123456\"\x10289997171@qq.com*+\b\x01\x12\x02P1\x1a\x12\n\x0e+8613618074943\x10\x00\x1a\x0f\n\x0b02882334717\x10\x02*+\b\x02\x12\x02P2\x1a\x12\n\x0e+8613996398667\x10\x00\x1a\x0f\n\x0b02882334717\x10\x02"
运行第二个注释,从redis中读取Jack数据,并反序列化生成User u2;
结果:
byteSize = 124
reply->len = 124
reply->str :
Jack123456"289997171@qq.com*P1 直接打印二进制数据是不正确的!!!
+8613618074943
---------------------------
1
Jack
123456
---------------------------
1
P1
+8613618074943
02882334717
---------------------------
2
P2
+8613996398667
02882334717
---------------------------
Great...那么,protobuf 与 redis的结合成功了!
个人认为,这种面向对象,并且跨语言,在存储和读取依赖redis内存数据库的基础上是非常的高性能!