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

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

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

ابدأ الدورة

التخزين المؤقت في C++: Redis وأدوات أخرى



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



1. Redis وعملاء C++ الخاصين به



Redis هو مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة" في الذاكرة، ويُستخدم غالبًا كذاكرة تخزين مؤقت. للعمل مع Redis من C++، توجد مكتبتان رئيسيتان:



1.1. hiredis

hiredis هي مكتبة C بسيطة، مدعومة رسميًا من Redis. توفر واجهة برمجة تطبيقات متزامنة وغير متزامنة.

التثبيت:

# Ubuntu/Debiansudo apt install libhiredis-dev

# macOSbrew install hiredis

# البناء من المصدرgit clone https://github.com/redis/hiredis.gitcd hiredis && make && sudo make install


مثال على الاستخدام (الوضع المتزامن):

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

int main() { 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 key1 value1"); freeReplyObject(reply);

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

redisFree(c); return 0;}


1.2. redis-plus-plus

redis-plus-plus هي غلاف حديث لـ C++17 فوق hiredis بواجهة مريحة، ودعم لتجمع الاتصالات، والمعاملات، وpub/sub.

التثبيت:

git clone https://github.com/sewenew/redis-plus-plus.gitcd redis-plus-plusmkdir build && cd buildcmake -DREDIS_PLUS_PLUS_CXX_STANDARD=17 ..make && sudo make install


مثال:

#include <sw/redis++/redis++.h>#include <iostream>

int main() { sw::redis::Redis redis("tcp://127.0.0.1:6379");

// تعيين مع TTL (مدة الحياة 60 ثانية) redis.setex("session:user1", 60, "active");

// الحصول على القيمة auto val = redis.get("session:user1"); if (val) { std::cout << "الجلسة: " << *val << std::endl; }

// التحقق من الوجود bool exists = redis.exists("session:user1"); std::cout << "موجودة: " << std::boolalpha << exists << std::endl;

return 0;}


2. Memcached وlibmemcached



Memcached هو مخزن بيانات آخر شائع في الذاكرة، محسّن لتخزين الكائنات الصغيرة مؤقتًا. المكتبة الرئيسية لـ C++ هي libmemcached.

التثبيت:

sudo apt install libmemcached-dev

# البناء من المصدرgit clone https://github.com/awesomized/libmemcached.gitcd libmemcached && ./configure && make && sudo make install


مثال:

#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, servers); memcached_server_list_free(servers);

// كتابة const char *key = "cache_key"; const char *value = "cached_value"; memcached_return_t rc = memcached_set(memc, k

توصيات