C++访问Redis的mset 二进制数据接口封装方案

2020-01-06 13:07:26丽君
  •     delete []argv; 
  •   delete []argvlen;    argv = NULL; 
  • }  ?

    redisCommandArgv接口传递的Vector方案

    还是使用redisCommandArgv接口,使用vector来构造这个const char **,这个方法是从参考资料1中学到的:
     

    1. void mset2( redisContext *c, const vector<string> &vtKey, const vector<string> & vtVal)  { 
    2.   if(vtKey.size() != vtVal.size())    { 
    3.     throw runtime_error( "Redis error" );    } 
    4.     vector<const char *> argv( vtKey.size() + vtVal.size() + 1 ); 
    5.   vector<size_t> argvlen( vtKey.size() + vtVal.size() + 1 );    int j = 0; 
    6.     static char msetcmd[] = "MSET"; 
    7.   argv[j] = msetcmd;    argvlen[j] = sizeof(msetcmd)-1; 
    8.   ++j;   
    9.   for(int i = 0;i< vtKey.size();++i)    { 
    10.     argvlen[j] = vtKey[i].length();      argv[j] = new char[argvlen[j]]; 
    11.      memset((void*)argv[j],0,argvlen[j] );      memcpy((void*)argv[j],vtKey[i].data(),vtKey[i].length()); 
    12.     j++;   
    13.     argvlen[j] = vtVal[i].length();      argv[j] = new char[argvlen[j]]; 
    14.     memset((void*)argv[j],0,argvlen[j]);      memcpy((void*)argv[j],vtVal[i].data(),vtVal[i].length()); 
    15.     j++;    } 
    16.     void *r = redisCommandArgv(c, argv.size(), &(argv[0]), &(argvlen[0]) ); 
    17.   if ( !r )      throw runtime_error( "Redis error" );