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

2020-01-06 13:07:26丽君
  •   vtVal.push_back("CCCC");    //add a binary data 
  •   vtKey.push_back("D");    vtVal.push_back(""); 
  •   char a[] = "ABCDE";    a[2] = 0; 
  •   vtVal[3].assign(a,5);   
  •   try    { 
  •     msetNotBinary(c, vtKey, vtVal );      //mset1( c, vtKey, vtVal ); 
  •     //mset2( c, vtKey, vtVal );    } 
  •   catch ( runtime_error & )    { 
  •     cout << "Error" << endl;    } 
  • }   
  • int main(int argc, char *argv[])  { 
  •   redisContext *c;   
  •   c = redisConnect("127.0.0.1",6379);    if (c->err) 
  •    {      cout << "Connection error: " << c->errstr << endl; 
  •     return -1;    } 
  •     do_test(c); 
  •     redisFree(c); 
  •     return 0; 
  • }  ?

    这种方式可以处理mset多个字符串数据,但对于数据内容为二进制数据的无能为力;

    redisCommandArgv接口传递 方案

    对于多个参数传递,hiredis提供了以下接口,这个接口中最后一个参数是所有的传入数据的内容长度, 
    就是说这个接口是二进制安全的:

    void *redisCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen);
    主要工作就是构造一个动态的二维数组char ** argv,其中涉及到char **到const char **的转换,有一定的风险, 
    关于这一点前一篇文章已经谈到;
     

    1. void mset1( redisContext *c, const vector<string> &vtKey, const vector<string> & vtVal )  {