设为首页 加入收藏

TOP

C++ Redis mset 二进制数据接口封装方案(二)
2015-07-20 17:19:51 来源: 作者: 【 】 浏览:7
Tags:Redis mset 二进制数据 接口 封装 方案
vlen;
? ? argv = NULL;
}
redisCommandArgv接口传递的Vector方案
?
还是使用redisCommandArgv接口,使用vector来构造这个const char **,这个方法是从参考资料1中学到的:
?
void mset2( redisContext *c, const vector &vtKey, const vector & vtVal)
{
? ? if(vtKey.size() != vtVal.size())
? ? {
? ? ? ? throw runtime_error( "Redis error" );
? ? }
?
? ? vector argv( vtKey.size() + vtVal.size() + 1 );
? ? vector argvlen( vtKey.size() + ?vtVal.size() + 1 );
? ? int j = 0;
?
? ? static char msetcmd[] = "MSET";
? ? argv[j] = msetcmd;
? ? argvlen[j] = sizeof(msetcmd)-1;
? ? ++j;
?
? ? for(int i = 0;i< vtKey.size();++i)
? ? {
? ? ? ? argvlen[j] = vtKey[i].length();
? ? ? ? argv[j] = new char[argvlen[j]];
? ? ? ? ?memset((void*)argv[j],0,argvlen[j] );
? ? ? ? memcpy((void*)argv[j],vtKey[i].data(),vtKey[i].length());
? ? ? ? j++;
?
? ? ? ? argvlen[j] = vtVal[i].length();
? ? ? ? argv[j] = new char[argvlen[j]];
? ? ? ? memset((void*)argv[j],0,argvlen[j]);
? ? ? ? memcpy((void*)argv[j],vtVal[i].data(),vtVal[i].length());
? ? ? ? j++;
? ? }
?
? ? void *r = redisCommandArgv(c, argv.size(), &(argv[0]), &(argvlen[0]) );
? ? if ( !r )
? ? ? ? throw runtime_error( "Redis error" );
? ? freeReplyObject( r );
}
这样,就实现二进制数据的传递;
?
二进制校验
?
程序执行后,可以用redis-cli来验证:
?
对于非二进制安全的实现,二进制内容是截断的:
/opt/app/colin$./redis-cli get D
"AB"
而二进制安全的实现接口,二进制数据的0通过转义方式显示:
/opt/app/colin$./redis-cli get D
"AB\x00DE"
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Leetcode_Factorial Trailing Zer.. 下一篇poj3239 Solution to the n Queen..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)
·关于 MySQL 数据库学 (2025-12-26 23:20:16)
·SOLVED: Ubuntu 24.0 (2025-12-26 22:51:53)
·Linux 常用命令最全 (2025-12-26 22:51:50)