Rumah >pangkalan data >Redis >Cara menggunakan Redis dan C++ untuk membangunkan fungsi publish-subscribe
Cara menggunakan Redis dan C++ untuk membangunkan fungsi publish-subscribe
Apabila membangunkan sistem masa nyata berskala besar, penerbitan-langganan model digunakan secara meluas Dalam penghantaran mesej dan mekanisme dipacu peristiwa. Redis ialah sistem storan nilai kunci berprestasi tinggi yang boleh mencapai komunikasi masa nyata dan pemindahan data dengan mudah melalui fungsi publish-subscribe yang disediakannya. Artikel ini akan memperkenalkan cara menggunakan Redis dan C++ untuk membangunkan fungsi publish-subscribe, dan menyediakan contoh kod khusus.
Berikut ialah contoh asas yang menunjukkan cara menggunakan perpustakaan klien Redis C++ untuk melaksanakan fungsi publish-subscribe.
#include <iostream> #include <string> #include <thread> #include <hiredis/hiredis.h> void subscribeThread() { // 创建Redis上下文 redisContext* context = redisConnect("127.0.0.1", 6379); if (context == NULL || context->err) { if (context) { std::cout << "Error: " << context->errstr << std::endl; redisFree(context); } else { std::cout << "Error: 连接Redis服务器失败!" << std::endl; } return; } // 订阅频道 redisReply* reply = static_cast<redisReply*>( redisCommand(context, "SUBSCRIBE mychannel")); if (reply == NULL || reply->type == REDIS_REPLY_ERROR) { std::cout << "Error: 订阅频道失败!" << std::endl; freeReplyObject(reply); redisFree(context); return; } // 循环接收消息 while (true) { redisReply* r = nullptr; int status = redisGetReply(context, (void**)&r); if (status == REDIS_ERR) { std::cout << "Error: 接收消息失败!" << std::endl; break; } if (r->type == REDIS_REPLY_ARRAY && r->elements == 3) { if (strcmp(r->element[0]->str, "message") == 0) { std::cout << "接收到消息: " << r->element[2]->str << std::endl; } } freeReplyObject(r); } // 释放资源 freeReplyObject(reply); redisFree(context); } void publishThread() { redisContext* context = redisConnect("127.0.0.1", 6379); if (context == NULL || context->err) { if (context) { std::cout << "Error: " << context->errstr << std::endl; redisFree(context); } else { std::cout << "Error: 连接Redis服务器失败!" << std::endl; } return; } // 发布消息 while (true) { std::string message; std::cout << "请输入要发布的消息(输入q退出):"; std::getline(std::cin, message); if (message == "q") { break; } redisReply* reply = static_cast<redisReply*>( redisCommand(context, "PUBLISH mychannel %s", message.c_str())); if (reply == NULL || reply->type == REDIS_REPLY_ERROR) { std::cout << "Error: 发布消息失败!" << std::endl; } freeReplyObject(reply); } // 释放资源 redisFree(context); } int main() { std::thread subThread(subscribeThread); std::thread pubThread(publishThread); subThread.join(); pubThread.join(); return 0; }
Dalam kod di atas, kami menggunakan hiredis perpustakaan klien C++ Redis untuk menyambung ke pelayan Redis. Dengan mencipta urutan yang berbeza, fungsi penerbitan dan langganan boleh dilaksanakan secara berasingan. Dalam urutan langganan, kami menggunakan fungsi redisCommand untuk melanggan saluran yang ditentukan dan menerima mesej melalui fungsi redisGetReply. Dalam urutan penerbitan, kami menggunakan fungsi redisCommand untuk menerbitkan mesej.
Atas ialah kandungan terperinci Cara menggunakan Redis dan C++ untuk membangunkan fungsi publish-subscribe. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!