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/

hiredis处理zscan和hscan的reply的更多相关文章

  1. redis系列-redis的连接

    Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品.它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list ...

  2. redis 迭代命令SCAN、SSCAN、HSCAN、ZSCAN

    SCAN 命令用于迭代当前数据库中的数据库键.SSCAN 命令用于迭代集合键中的元素.HSCAN 命令用于迭代哈希键中的键值对.ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值). S ...

  3. 萌新笔记——封装hiredis——C++与redis对接(一)(string的SET与GET操作)

    在菜鸟教程自学了redis,总想着像Mysql一样,在C/C++中进行对接.于是查询了一些资料,最后找到了hiredis.然而直接用它的话,难免有点不方便.于是,对其进行封装. hiredis直接去g ...

  4. Hiredis 基本使用

    0. 前言 Hiredis是一个Redis的C客户端库函数,基本实现了Redis的协议的最小集.这里对hiredis的api作基本的介绍以及应用,主要参考hiredis的README文件以及相关源码. ...

  5. redis C接口hiredis 简单函数使用介绍

    hiredis是redis数据库的C接口,目前只能在linux下使用,几个基本的函数就可以操作redis数据库了. 函数原型:redisContext *redisConnect(const char ...

  6. 使用hiredis实现pipeline方式访问

    1.介绍 hiredis: 一个c/c++的访问redis的api库 地址:https://github.com/redis/hiredis pipeline方式: redis中的pipeline方式 ...

  7. hiredis的安装

    Hiredis客户端下载地址:https://github.com/antirez/hiredis/zipball/master Hiredis安装步骤: tar zxvf antirez-hired ...

  8. redis内存数据库C客户端hiredis API 中文说明

    A)编译安装 make make install (/usr/local) make install PREFIX=$HOME/progs(可以自由指定安装路径) B)同步的API接口 redisCo ...

  9. hiredis异步接口封装并导出到Lua

    hiredis异步接口封装并导出到Lua(金庆的专栏 2017.1)hiredis 不支持 Windows, Windows 下使用 wasppdotorg / hiredis-for-windows ...

随机推荐

  1. 盘点SQL on Hadoop中用到的主要技术

    转载自:http://sunyi514.github.io/2014/11/15/%E7%9B%98%E7%82%B9sql-on-hadoop%E4%B8%AD%E7%94%A8%E5%88%B0% ...

  2. java.lang.IllegalArgumentException的解决方法

    java.lang.IllegalArgumentException这个错误基本上就是jdk版本的问题 把jdk1.8换成jdk1.7就可以了 这里可以设置jdk最低版本 这里默认要选择jdk1.7 ...

  3. jquery实现全选/全不选

    //设置全选全不选$("#checkAll").click(function () { if ($("#checkAll").attr("checke ...

  4. HDFS读写流程learning

    有许多对流程进行描述的博客,但是感觉还是应当学习一遍代码,不然总感觉怪怪的,https://blog.csdn.net/popsuper1982/article/details/51615285,首先 ...

  5. java将配置信息写在数据库(利用反射)

    Demo出处: 1. package com.fpx.pcs.prealert.process.xml.service.impl; public class CainiaoPushMessageSer ...

  6. java高级特性(2)--循序渐进地培养面向对象的思维方式

    在我踏入软件行业后,一直苦于没有前辈指点.我常年困惑于两个问题:一是怎样培养面向对象设计的思维能力?二是怎样进行架构设计,有无方法? 因为我做了那么多年项目,却很少看到有漂亮的面向对象思维写出来的代码 ...

  7. 无法启动此程序,因为计算机丢失MSVCP120.dll

    这种错误是由于未安装** vcredist **引起的(而且版本是 2013版):https://www.microsoft.com/zh-CN/download/details.aspx?id=40 ...

  8. 常见ADB命令

    常见ADB命令 比如说知道了push和pull操作,就可以实现一个简单的手机助手. 如果有多台设备,操作的时候要指定设备.  -s加设备名称

  9. hdu4081次小生成树

    先求一遍最小生成树,然后遍历所有边,如果这条边在最小生成树中就直接减去这条边的距离,如果不在最小生成树中,那么就构成了一个环,此时需要减去最小生成树中最大的边,即求次小生成树时的maxx, 有一点要注 ...

  10. 使用maven插件自动部署web应用至Docker容器的tomcat

    配置maven 在pom.xml加入 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 <plugins>     <plugin>         <gr ...