google protocol buffer 与 redis 结合使用(二)
teSize); // 重点!!!
// printf("SET (binary API): %s\n", reply->str);
// freeReplyObject(reply);
// 第二次执行:从redis数据库读取对象数据
reply = (redisReply*) redisCommand(c, "Get Jack");
std::cout << "reply->len = " << reply->len << "\nreply->str : \n" << reply->str << std::endl; // 这里打印不完
std::cout << "---------------------------" << std::endl;
cn::vicky::model::seri::User u2;
u2.ParseFromArray(reply->str, reply->len);
std::cout << u2.id() << std::endl;
std::cout << u2.username() << std::endl;
std::cout << u2.password() << std::endl;
std::cout << u2.email() << std::endl;
std::cout << "---------------------------" << std::endl;
for (int i = 0; i < u2.person_size(); i++) {
cn::vicky::model::seri::Person* p = u2.mutable_person(i);
std::cout << p->id() << std::endl;
std::cout << p->name() << std::endl;
for (int j = 0; j < p->phone_size(); j++) {
cn::vicky::model::seri::PhoneNumber* phone = p->mutable_phone(j);
std::cout << phone->number() << std::endl;
}
std::cout << "---------------------------" << std::endl;
}
return 0;
}
首先:
[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
289997171@qq.com
---------------------------
1
P1
+8613618074943
02882334717
---------------------------
2
P2
+8613996398667
02882334717
---------------------------
Great...那么,protobuf 与 redis的结合成功了!