首先第一步链接redis
redisContext *context = redisConnect("127.0.0.1", 6379);
if (context->err)
{
std::cout << "can not connect to redisserver: 127.0.0.1,port:6379" << endl;
std::cout << "reason:" << context->errstr << endl;
redisFree(context);
context = NULL;
return 0;
}
第二和第三步可以不写
//2、校验密码
char *auth = "test123";
redisReply *reply = (redisReply *)redisCommand(context, "AUTH %s", auth);
if (NULL == reply)
{
std::cout << "wrong password!" << endl;
freeReplyObject(reply);
redisFree(context);
context = NULL;
return 0;
}
freeReplyObject(reply);
//3、选择数据库 - 不选择也可
reply = (redisReply *)redisCommand(context, "SELECT %d", 1);
if (NULL == reply || REDIS_REPLY_ERROR == reply->type)
{
std::cout << "select failed!" << endl;
freeReplyObject(reply);
redisFree(context);
context = NULL;
return 0;
}
4. 下面就可以收发数据了
//发布消息 PUBLISH
redisReply* reply = (redisReply *)redisCommand(context, "SUBSCRIBE %s %s", "spub","hello messge");
//redisReply* reply = (redisReply *)redisCommand(context, "SUBSCRIBE %s %b", "spub",messge,size); //二进制数据
if (NULL == reply)
{
std::cout << "subscribe failed!" << endl;
freeReplyObject(reply);
redisFree(context);
context = NULL;
return 0;
}
freeReplyObject(reply);
//订阅消息 可以订阅PSUBSCRIBE
redisReply* reply = (redisReply *)redisCommand(context, "SUBSCRIBE %s", "spub");
if (NULL == reply||reply->type != REDIS_REPLY_ARRAY)//订阅成功返回一个数组标识
{
std::cout << "subscribe failed!" << endl;
freeReplyObject(reply);
redisFree(context);
context = NULL;
return 0;
}
freeReplyObject(reply);
//阻塞等待订阅消息
while (true)
{
void *_reply = nullptr;
if (redisGetReply(context, &_reply) != REDIS_OK)
{
continue;
}
reply = (redisReply*)_reply;
for (int nIndex = 0; nIndex < reply->elements; nIndex++)
{
std::cout << nIndex + 1 << ")";
std::cout << reply->element[nIndex]->str << std::endl;
//message_fn(reply->element[1]->str, reply->element[2]->str, reply->element[2]->len);
}
freeReplyObject(reply);
std::cout << "***************" << std::endl;
}
非订阅模式
redisReply* reply = (redisReply *)redisCommand(context, "SET %s %s", "spub","hello messge");
//redisReply* reply = (redisReply *)redisCommand(context, "SET %s %b", "spub",messge,size); //二进制数据
if (NULL == reply)
{
std::cout << "subscribe failed!" << endl;
freeReplyObject(reply);
redisFree(context);
context = NULL;
return 0;
}
freeReplyObject(reply);
redisReply* reply = (redisReply *)redisCommand(context, "GET %s", "spub");
if (NULL == reply)
{
std::cout << "subscribe failed!" << endl;
freeReplyObject(reply);
redisFree(context);
context = NULL;
return 0;
}
if (reply->len > 0){
char* pData = (char*)malloc(reply->len);
memcpy(pData,reply->str,reply->len);
}
freeReplyObject(reply);