عميل Redis للغة C++: نظرة عامة ودليل عملي
\n\nRedis هي قاعدة بيانات عالية الأداء في الذاكرة (in-memory)، تُستخدم على نطاق واسع للتخزين المؤقت، وإدارة الجلسات، وقوائم انتظار الرسائل، والتحليلات في الوقت الفعلي. للتفاعل مع Redis بلغة C++، توجد عدة مكتبات ناضجة. في هذه المقالة، سنستعرض اثنتين من الأكثر شيوعًا: hiredis (العميل الرسمي بلغة C، والذي يمكن دمجه بسهولة في C++) وRedis++ (عميل حديث بلغة C++17 مع بناء جملة سهل الاستخدام). ستتعلم كيفية تثبيت هذه الأدوات وإعدادها واستخدامها في مشاريعك.
\n\n1. مكتبة hiredis
\n\nhiredis هو عميل بلغة 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:
g++ -o test test.cpp -lhiredis\n\n2. مكتبة Redis++ (sw/redis++ / redox)
\n\nRedis++ (المعروفة أيضًا باسم sw/redis++) هي عميل حديث بلغة C++17 يوفر واجهة آمنة من حيث الأنواع، ودعمًا لمجموعة الاتصالات، والمعاملات، وخط الأنابيب (pipeline)، وRedis Cluster. إذا كنت تفضل الكتابة بلغة C++ "نقية" بدون أسلوب C، فإن Redis++ هو الخيار المثالي.
تثبيت 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 للعمل مع الأوامر:
#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"