التخزين المؤقت في C++: Redis وMemcached والحلول المدمجة

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

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

ابدأ الدورة

التخزين المؤقت في C++: Redis وMemcached والحلول المضمنة



التخزين المؤقت هو أحد الأدوات الرئيسية لتحسين أداء التطبيقات في C++. فهو يسمح بتقليل وقت الوصول إلى البيانات، وتخفيف الحمل على قواعد البيانات، وتسريع معالجة الطلبات. في هذه المقالة، سنستعرض ثلاثة أساليب رئيسية للتخزين المؤقت في C++: استخدام الأنظمة الخارجية Redis وMemcached، بالإضافة إلى إنشاء حلول مضمنة باستخدام الحاويات والمكتبات القياسية. ستتعرف على متى تختار أي أسلوب، وسترى أمثلة عملية للكود.



لماذا نحتاج التخزين المؤقت في C++؟



غالبًا ما تعمل تطبيقات C++ مع كميات كبيرة من البيانات: من خوادم الويب إلى محركات الألعاب وأنظمة الوقت الفعلي. بدون التخزين المؤقت، قد يؤدي كل طلب إلى عمليات إدخال/إخراج مكلفة أو حسابات معقدة. يخزن الكاش البيانات المطلوبة بشكل متكرر في ذاكرة سريعة، مما يوفر:

  • تقليل زمن الاستجابة — الوصول إلى الذاكرة العشوائية أسرع بمقدار 100-1000 مرة من الوصول إلى القرص أو الشبكة.
  • تقليل الحمل — تتلقى قاعدة البيانات والخدمات الخارجية عددًا أقل من الطلبات.
  • زيادة الإنتاجية — يعالج التطبيق المزيد من الطلبات في الثانية.


أنظمة التخزين المؤقت الخارجية: Redis



ما هو Redis؟

Redis هو مخزن بيانات في الذاكرة من نوع "مفتاح-قيمة" مع دعم الهياكل المعقدة (القوائم، المجموعات، التجزئات). يعمل كخادم منفصل يتفاعل معه تطبيق C++ عبر الشبكة. يعتبر Redis مثاليًا للأنظمة الموزعة حيث يجب أن يكون الكاش مشتركًا بين عدة عمليات أو أجهزة.



الاتصال بـ Redis من C++

للعمل مع Redis في C++، استخدم مكتبة hiredis — عميل بسيط بلغة C. مثال على الاتصال وتنفيذ طلب بسيط:

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

int main() { // الاتصال بـ Redis على localhost:6379 redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { std::cerr << "خطأ في الاتصال: " << c->errstr << std::endl; return 1; }

// تعيين مفتاح redisReply *reply = (redisReply*)redisCommand(c, "SET key %s", "value_cpp"); freeReplyObject(reply);

// الحصول على القيمة reply = (redisReply*)redisCommand(c, "GET key"); if (reply->type == REDIS_REPLY_STRING) { std::cout << "القيمة: " << reply->str << std::endl; } freeReplyObject(reply);

redisFree(c); return 0;}


مزايا وعيوب Redis

  • + سرعة عالية (ميكروثانية)، دعم TTL، النسخ المتماثل، الاستمرارية.
  • + مجموعة غنية من هياكل البيانات (سلاسل، قوائم، تجزئات، خرائط بت).
  • - يتطلب خادمًا منفصلاً وتفاعلًا شبكيًا.
  • - اعتماد على البنية التحتية الخارجية.


أنظمة التخزين المؤقت الخارجية: Memcached



ما هو Memcached؟

Memcached هو نظام تخزين مؤقت موزع عالي الأداء في الذاكرة. على عكس Redis، فهو يدعم فقط أزواج "مفتاح-قيمة" البسيطة وليس لديه استمرارية مدمجة. يعتبر Memcached مثاليًا لتخزين نتائج استعلامات SQL مؤقتًا، وأجزاء HTML، والجلسات.



الاتصال بـ Memcached من C++

للاستخدام مع C++، استخدم libmemcached — مكتبة شائعة مع واجهة C API. مثال:

#include <libmemcached/memcached.h>#include <iostream>#include <cstring>

int main() { memcached_st *memc = memcached_create(nullptr); memcached_server_st *servers = memcached_server_list_append(nullptr, "127.0.0.1", 11211, nullptr); memcached_server_push(memc, serve

المدونات

توصيات الكتب