Redis发布订阅功能的C客户端代码-使用hiredis库实现订阅功能
一、代码实现
redis_test_sub.c
#include <hiredis/hiredis.h>
#include <stdio.h>
int main(int argc, char** argv)
{
const char* pServerAddr = "127.0.0.1";
uint16_t nPort = 6379;
const char* pSubChannel = "ChannelTest";
if (argc >= 4)
{
pServerAddr = argv[1];
nPort = (uint16_t)atoi(argv[2]);
pSubChannel = argv[3];
}
printf("connect redis server:%s,port:%d,SUBSCRIBE channel:%s\n", pServerAddr, nPort, pSubChannel);
redisContext* context = redisConnect(pServerAddr, nPort); //链接本地127.0.0.1,端口为6379的redis
redisReply* reply;
reply = redisCommand(context, "SUBSCRIBE %s",pSubChannel);
freeReplyObject(reply);
while (redisGetReply(context, &reply) == REDIS_OK)
{
// consume message
if (reply)
{
switch (reply->type)
{
case REDIS_REPLY_ERROR:
case REDIS_REPLY_STRING:
case REDIS_REPLY_NIL:
case REDIS_REPLY_INTEGER:
case REDIS_REPLY_STATUS:
break;
case REDIS_REPLY_ARRAY:
{
int i = 0;
for (i = 0; i < reply->elements; ++i)
{
redisReply* childReply = reply->element[i];
if (childReply->type == REDIS_REPLY_STRING)
{
printf("value:%s\n", childReply->str);
}
}
}
break;
default:
break;
}
freeReplyObject(reply);
}
}
redisFree(context);
return 0;
}
二、编译及测试
1、编译:gcc -o redis_test_sub -g redis_test_sub.c -L/usr/local/lib64/ -lhiredis
2、运行:./redis_test_sub 127.0.0.1 6379 ChannelTest
3、服务端发布:PUBLISH ChannelTest “this is a channel test”
4、结果如下: