عميل Redis لـ C++: الاتصال والتثبيت والأمثلة

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

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

ابدأ الدورة

عميل Redis لـ C++: دليل شامل للعمل مع hiredis



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



ما هي hiredis؟



hiredis هو عميل C رسمي لـ Redis، تم تطويره بواسطة نفس فريق Redis. يدعم:

  • الاتصالات المتزامنة وغير المتزامنة
  • إعادة الاتصال التلقائي عند انقطاع الاتصال
  • إرسال الأوامر المتدفقة (pipelining)
  • العمل مع البيانات الثنائية
  • الدعم الكامل لبروتوكول Redis (RESP2 و RESP3)


على الرغم من أن hiredis مكتوبة بلغة C، إلا أنها مناسبة تمامًا لمشاريع C++: يمكن تغليفها في فئات RAII، واستخدامها مع مصطلحات C++11/17 الحديثة، ودمجها بسهولة مع المكتبات الأخرى.



تثبيت hiredis



أسهل طريقة للتثبيت هي عبر مدير الحزم الخاص بالنظام. أمثلة لأنظمة تشغيل مختلفة:



Ubuntu / Debian

sudo apt updatesudo apt install libhiredis-dev


macOS (Homebrew)

brew install hiredis


Windows (vcpkg)

vcpkg install hiredis


إذا كنت تفضل بناء hiredis من المصدر (مثلاً، لتكوين مخصص):

git clone https://github.com/redis/hiredis.gitcd hiredismakesudo make install


الاتصال بخادم Redis



بعد تثبيت hiredis، يمكنك ربطها بمشروع C++ الخاص بك. تأكد من تحديد مسارات ملفات الرأس والمكتبات في إعدادات المترجم:

  • -I/usr/include (أو المسار إلى hiredis.h)
  • -lhiredis للربط


مثال على كود أدنى للاتصال بـ Redis يعمل على localhost:6379:

#include <hiredis/hiredis.h>#include <iostream>

int main() { // الاتصال بـ Redis redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { if (c) { std::cerr << "خطأ في الاتصال: " << c->errstr << std::endl; redisFree(c); } else { std::cerr << "فشل في تخصيص ذاكرة للسياق" << std::endl; } return 1; } std::cout << "تم إنشاء الاتصال بـ Redis!" << std::endl;

// تحرير الموارد redisFree(c); return 0;}


إرسال الأوامر واستلام الردود



توفر hiredis الدالة redisCommand لإرسال الأوامر. تُرجع مؤشرًا إلى redisReply، الذي يحتوي على نتيجة التنفيذ. تحقق دائمًا من أن الرد ليس nullptr، وحرر الذاكرة بعد الاستخدام.



لننظر إلى العمليات الأساسية: تعيين قيمة سلسلة نصية والحصول عليها.



#include <hiredis/hiredis.h>#include <iostream>#include <string>

int main() { redisContext *c = redisConnect("127.0.0.1", 6379); if (!c || c->err) { std::cerr << "خطأ في الاتصال: " << (c ? c->errstr : "null") << std::endl; return 1; }

// تعيين المفتاح "myname" بالقيمة "C++ Developer" redisReply *reply = (redisReply*)redisCommand(c, "SET myname 'C++ Developer'"); if (reply == nullptr) { std::cerr << "خطأ في تنفيذ الأمر SET" << std::endl; redisFree(c); return

توصيات