redisCommandArgv接口传递的Vector方案
还是使用redisCommandArgv接口,使用vector来构造这个const char **,这个方法是从参考资料1中学到的:
- void mset2( redisContext *c, const vector<string> &vtKey, const vector<string> & vtVal) {
- if(vtKey.size() != vtVal.size()) {
- throw runtime_error( "Redis error" ); }
- vector<const char *> argv( vtKey.size() + vtVal.size() + 1 );
- vector<size_t> 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" );










