التخزين المؤقت في PHP: Redis وMemcached وأدوات أخرى
التخزين المؤقت هو أحد أكثر الطرق فعالية لتسريع عمل تطبيقات الويب في PHP. بدلاً من تنفيذ استعلامات قاعدة البيانات الثقيلة أو حساب البيانات المعقدة في كل مرة، يمكنك حفظ النتيجة في مخزن سريع. في هذه المقالة، سنستعرض أدوات التخزين المؤقت الرئيسية في PHP: Redis وMemcached وAPCu والتخزين المؤقت البسيط للملفات. ستتعرف على متى تختار أي أداة وكيفية استخدامها بشكل صحيح.
لماذا نحتاج إلى التخزين المؤقت؟
تخيل أن موقعك يعرض قائمة بأحدث الأخبار. بدون التخزين المؤقت، كل مستخدم يجعل PHP ينفذ استعلام SQL ويعالج البيانات ويُكوّن HTML. إذا كان الموقع يستقبل 1000 شخص في الدقيقة، فإن قاعدة البيانات تتعرض لضغط هائل. يسمح التخزين المؤقت بحفظ النتيجة لمدة 5–10 دقائق وإعادتها فوراً.
السيناريوهات الرئيسية لاستخدام التخزين المؤقت في PHP:
- نتائج استعلامات SQL الثقيلة
- أجزاء HTML من الصفحات
- بيانات استعلامات API للخدمات الخارجية
- جلسات المستخدمين
- الإعدادات والتكوينات
1. Redis — ملك التخزين المؤقت
Redis هو مخزن بيانات في الذاكرة يعمل بمبدأ "مفتاح-قيمة". يدعم هياكل بيانات معقدة: القوائم، المجموعات، جداول التجزئة. يوجد امتداد شائع لـ PHP هو phpredis ومكتبة أكثر حداثة هي Predis.
التثبيت والاتصال
قم بتثبيت Redis على الخادم، ثم قم بتثبيت الامتداد عبر Composer:
composer require predis/predisمثال على العمل مع Redis في PHP
<?phprequire 'vendor/autoload.php';
use Predis\\Client;
$client = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);
// حفظ البيانات لمدة 10 دقائق$client->setex('news_list', 600, json_encode($newsData));
// استرجاع البيانات$cached = $client->get('news_list');if ($cached) { $newsData = json_decode($cached, true);} else { // استعلام قاعدة البيانات وحفظه في التخزين المؤقت}?>مزايا Redis: سرعة عالية (ميكروثانية)، حذف تلقائي للمفاتيح منتهية الصلاحية (TTL)، دعم Pub/Sub، المعاملات. العيب — يستهلك ذاكرة الوصول العشوائي.
2. Memcached — البساطة والسرعة
Memcached هو مخزن بيانات آخر في الذاكرة، لكنه أبسط من Redis. يخزن فقط السلاسل النصية ولا يدعم هياكل البيانات المعقدة. ومع ذلك، فهو مثالي للتخزين المؤقت الأساسي.
مثال مع Memcached
<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);
$key = 'user_profile_123';$data = $memcached->get($key);
if ($data === false) { // البيانات غير موجودة في التخزين المؤقت — نحصل عليها من قاعدة البيانات $data = getUserProfileFromDB(123); $memcached->set($key, $data, 300); // 5 دقائق}?>Memcached أسرع من Redis في عمليات get/set البسيطة، لكنه أقل في الوظائف. مناسب لتخزين نتائج الاستعلامات والجلسات مؤقتاً.
3. APCu — التخزين المؤقت على مستوى PHP
APCu (Alternative PHP Cache) هو امتداد يخزن البيانات مباشرة في ذاكرة عملية PHP. لا يتطلب خادماً منفصلاً، لكنه يعمل فقط ضمن خادم واحد.
مثال مع APCu
<?php// حفظ القيمة لمدة 10 دقائقapcu_store('site_config', $config, 600);
// استرجاع القيمة$config = apcu_fetch('site_config');if ($config === false) { // تحميل الإعدادات من ملف $config = parse_ini_file('config.ini'); apcu_store('site_config', $config, 600);}?>APcu مثالي لتخزين الإعدادات والقوالب والبيانات الصغيرة التي نادراً ما تتغير. العيب — تُفقد البيانات عند إعادة تشغيل PHP أو خادم الويب.