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;
}