عميل Redis للغة C++: التثبيت والإعداد وأمثلة الاستخدام

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل Redis للغة C++: نظرة عامة ودليل عملي

\n\n

Redis هي قاعدة بيانات عالية الأداء في الذاكرة (in-memory)، تُستخدم على نطاق واسع للتخزين المؤقت، وإدارة الجلسات، وقوائم انتظار الرسائل، والتحليلات في الوقت الفعلي. للتفاعل مع Redis بلغة C++، توجد عدة مكتبات ناضجة. في هذه المقالة، سنستعرض اثنتين من الأكثر شيوعًا: hiredis (العميل الرسمي بلغة C، والذي يمكن دمجه بسهولة في C++) وRedis++ (عميل حديث بلغة C++17 مع بناء جملة سهل الاستخدام). ستتعلم كيفية تثبيت هذه الأدوات وإعدادها واستخدامها في مشاريعك.

\n\n

1. مكتبة hiredis

\n\n

hiredis هو عميل بلغة C بسيط، تم تطويره بواسطة نفس فريق Redis. إنه خفيف وسريع ويدعم الطلبات المتزامنة وغير المتزامنة. بالنسبة لمبرمجي C++، يُعد hiredis أساسًا ممتازًا، حيث يمكن استدعاؤه مباشرة من كود C++ عن طريق تغليفه في كائنات RAII.

\n\n

تثبيت hiredis

\n

يتم تثبيت hiredis عبر مدير الحزم أو عن طريق البناء من المصدر:

\n
# Ubuntu/Debian\nsudo apt-get install libhiredis-dev\n\n# macOS (Homebrew)\nbrew install hiredis\n\n# البناء من المصدر\ngit clone https://github.com/redis/hiredis.git\ncd hiredis\nmake\nsudo make install
\n\n

الإعداد ومثال أساسي

\n

للعمل مع hiredis، يجب تضمين ملف الرأس والربط مع المكتبة. فيما يلي مثال للاتصال بـ Redis وتنفيذ أوامر بسيطة:

\n
#include <iostream>\n#include <hiredis/hiredis.h>\n\nint main() {\n    // الاتصال بـ Redis على localhost:6379\n    redisContext *c = redisConnect("127.0.0.1", 6379);\n    if (c == nullptr || c->err) {\n        std::cerr << "خطأ في الاتصال: " << c->errstr << std::endl;\n        return 1;\n    }\n\n    // إرسال أمر SET\n    redisReply *reply = (redisReply*)redisCommand(c, "SET key1 Hello");\n    if (reply->type == REDIS_REPLY_STATUS) {\n        std::cout << "SET: " << reply->str << std::endl;\n    }\n    freeReplyObject(reply);\n\n    // إرسال أمر GET\n    reply = (redisReply*)redisCommand(c, "GET key1");\n    if (reply->type == REDIS_REPLY_STRING) {\n        std::cout << "GET: " << reply->str << std::endl;\n    }\n    freeReplyObject(reply);\n\n    // تحرير الموارد\n    redisFree(c);\n    return 0;\n}
\n

يتم التجميع باستخدام العلم -lhiredis:

\n
g++ -o test test.cpp -lhiredis
\n\n

2. مكتبة Redis++ (sw/redis++ / redox)

\n\n

Redis++ (المعروفة أيضًا باسم sw/redis++) هي عميل حديث بلغة C++17 يوفر واجهة آمنة من حيث الأنواع، ودعمًا لمجموعة الاتصالات، والمعاملات، وخط الأنابيب (pipeline)، وRedis Cluster. إذا كنت تفضل الكتابة بلغة C++ "نقية" بدون أسلوب C، فإن Redis++ هو الخيار المثالي.

\n\n

تثبيت Redis++

\n

يتم التثبيت عبر vcpkg أو Conan أو البناء من المصدر:

\n
# عبر vcpkg\nvcpkg install redis-plus-plus\n\n# عبر Conan\nconan install redis++/1.3.3@\n\n# البناء من المصدر\ngit clone https://github.com/sewenew/redis-plus-plus.git\ncd redis-plus-plus\nmkdir build && cd build\ncmake ..\nmake\nsudo make install
\n\n

مثال على استخدام Redis++

\n

تستخدم المكتبة كائن Redis للعمل مع الأوامر:

\n
#include <iostream>\n#include <sw/redis++/redis++.h>\n\nint main() {\n    try {\n        // إنشاء عميل\n        sw::redis::Redis redis("tcp://127.0.0.1:6379");\n\n        // تعيين قيمة\n        redis.set("mykey", "Hello, Redis++!");\n\n        // الحصول على قيمة\n        auto val = redis.get("mykey");\n        if (val) {\n            std::cout << "GET: " << *val << std::endl;\n        }\n\n        // العمل مع التجزئات (hashes)\n        redis.hset("user:1", "name", "Alice");\n        redis.hset("user:1", "age"                    

توصيات