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

2020-01-06 13:07:26丽君
  •   if(vtKey.size() != vtVal.size())    { 
  •     throw runtime_error( "Redis error" );    } 
  •     char ** argv = new char*[vtKey.size() + vtVal.size() + 1 ]; 
  •   size_t * argvlen = new size_t[vtKey.size() + vtVal.size() + 1 ];   
  •   int j = 0;    argv[j] = new char[5]; 
  •   memcpy(argv[j],"MSET",4);    argvlen[j] = 4; 
  •   ++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++; 
  •   }   
  •   //if not use const_cast<const char**> ,compile error    //for why assign from char** to const char** error, see my blog ... 
  •    void *r = redisCommandArgv(c, vtKey.size() + vtVal.size() + 1, const_cast<const char**>(argv), argvlen );    if ( !r ) 
  •     throw runtime_error( "Redis error" );    freeReplyObject( r ); 
  •     for(int i = 0;i < vtKey.size();i++) 
  •   {      delete [] argv[i]; 
  •     argv[i] = NULL;    }