hiredis api部分详解

发送命令

  • void* redisCommand(redisContext c,const char format,...);
    • 参数
    • 返回值
      • 返回值是一个void类型的指针,实际为指向一个redisReply类型的指针
      typedef struct redisReply{
      	// 命令执行结果的返回类型下面有写
      	int type;
      	// 存储执行结果返回为整数
      	long long integer;
      	// 字符串值的长度
      	size_t len;
      	// 存储命令执行结果返回时字符串
      	char *str;
      	// 返回结果时数组的大小
      	size_t elements;
      	// 存储执行结果返回时数组
      	struct redisReply **element;
      }redisRenly
      

标识

+ REDIS_REPLY_STRING==1
+ REDIS_REPLY_ARRAY==2
+ REDIS_REPLY_INEGER==3
+ REDIS_REPLY_NIL==4
+ REDIS_REPLY_STATUS==5
+ REDIS_REPLY_ERROR==6

接收订阅

redisGetReply(context, reply)

  • 看看是否在context包含的buf中有reply可以get,如果有读取一个。这里一定是因为buf中的数据符合redis协议,n个reply以特定格式连在一起,因此每次可以get一个。如果有reply get,则返回成功,否则进入下一步2

  • 以阻塞方式从fd读取replys,并存储在context包含的buf中,并取出一个reply,然后返回

int main()
{
    auto pc = redisConnect("127.0.0.1",6379);
    if(NULL != pc) 
    {   
        freeReplyObject(redisCommand(pc,"subscribe 1"));
        redisReply *reply = NULL;
        redisGetReply(pc,(void**)&reply);                                       
        cout<<"message from channel: "<<string(reply->element[1]->str)<<endl;;
        cout<<"message from channel: "<<string(reply->element[2]->str)<<endl;;
        redisFree(pc);
    }   
    getchar();
    return 0;
}

posted on 2021-05-15 10:04  lodger47  阅读(105)  评论(0编辑  收藏  举报

导航