zoukankan      html  css  js  c++  java
  • hiredis处理zscan和hscan的reply

      zscan的返回值可以看做是一个二维数组,第一维包含两个元素:string类型的游标cursor和集合元素数组;第二维即集合元素数组,这个数组交替存放着集合元素和score,元素和score也都是string类型的。当然所有的值都是通过指针来引用的,所以使用时务必小心。

      当cursor为0时表示,扫描结束;非0的cursor值用来进行后续扫描。

      集合元素数组reply->elements指示当前数组中包含多少个元素(指针),据此来遍历整个数组。

      示例代码如下:

    //cLocal points to the local redis

    llCursor=0;

    done=false;

    while(!done)

    {

      cmd="zscan "+setName+" %lld count 10";
      reply = (redisReply *)redisCommand(cLocal, cmd.c_str(), llCursor);
      if(reply == NULL)
      {
        cout << "scan " << setName << "failed, error is: " << cLocal->errstr;
        redisFree(cLocal);
        cLocal = NULL;
        break;
      }

      if(reply->type == REDIS_REPLY_ARRAY)
      {
        if(reply->elements == 0)
        {
          done=true;
          cout << "get 0 msg from " << setName;
        }
        else
        {
          llCursor=boost::lexical_cast<long long>(reply->element[0]->str);

          redisReply ** siteCounters=reply->element[1]->element;
          for(size_t i=0; i<reply->element[1]->elements; i++)
          {
            string elem = siteCounters[i++]->str;
            string score = siteCounters[i]->str;

          }
          if(llCursor == 0)
          {
            done=true;
          }
        }
      }
      else
      {
        done=true;
      }
      freeReplyObject(reply);

    }

       hscan和zscan api的用法是一样的。

      本文转自我的个人博客“零一积流”,原链接在这里:http://www.it-refer.com/2015/11/06/hiredis-zscan-hscan-reply/

  • 相关阅读:
    洛谷P1908 逆序对
    codevs1690 开关灯
    洛谷P1195 口袋的天空
    洛谷P1816 忠诚
    洛谷P1536 村村通
    洛谷P3045 [USACO12FEB]牛券Cow Coupons
    洛谷P1801 黑匣子_NOI导刊2010提高(06)
    洛谷P2947 [USACO09MAR]仰望Look Up
    Android(java)学习笔记51:ScrollView用法
    Android(java)学习笔记50:通过反射获取成员变量和成员方法并且使用
  • 原文地址:https://www.cnblogs.com/rd-log/p/4949542.html
Copyright © 2011-2022 走看看