مقدمة: لماذا نحتاج إلى التخزين المؤقت في PHP؟
أي تطبيق ويب حديث يعمل بلغة PHP يواجه مشكلة الأداء. كل استعلام لقاعدة البيانات، أو قراءة ملفات الإعدادات، أو عرض قالب HTML معقد يستهلك وقتًا وموارد الخادم. التخزين المؤقت هو تقنية تتيح حفظ نتائج العمليات المكلفة في مخزن سريع، بحيث يتم إرجاع البيانات الجاهزة فورًا عند الطلب المتكرر.
في PHP، توجد عدة مستويات للتخزين المؤقت: بدءًا من التخزين المؤقت المدمج للبايت كود (OPcache) وصولاً إلى الأنظمة الموزعة مثل Redis و Memcached. في هذه المقالة، سنشرح كيف ومتى نستخدم كلًا من هذه الأدوات، لجعل موقعك أسرع، وقادرًا على تحمل حمولة أكبر، وتوفير الموارد.
الحلول المدمجة: OPcache و APCu
قبل توصيل الخدمات الخارجية، يجدر الانتباه إلى ما تقدمه PHP «مباشرة من الصندوق». آليتان رئيسيتان — OPcache و APCu — يمكن أن تحققا زيادة كبيرة في الأداء دون تثبيت برامج إضافية.
OPcache: التخزين المؤقت للبايت كود
في كل مرة ينفذ PHP سكريبتًا، يقوم بتجميعه إلى بايت كود (opcode). يقوم OPcache بحفظ هذا البايت كود في الذاكرة المشتركة، مما يسمح بتخطي مرحلة التجميع في الطلبات اللاحقة. هذا فعال بشكل خاص لأطر العمل (Laravel, Symfony) وأنظمة إدارة المحتوى (WordPress, Drupal)، حيث يتم تحميل عشرات الملفات لكل طلب.
الإعداد في php.ini:
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=60يوصى بتفعيل OPcache على جميع خوادم الإنتاج. هذه هي على الأرجح أبسط طريقة لتسريع تطبيق PHP بنسبة 20–40%.
APCu: التخزين المؤقت لبيانات المستخدم
يوفر APCu (Alternative PHP Cache) واجهة بسيطة لتخزين البيانات العشوائية في الذاكرة المشتركة. على عكس OPcache الذي يخزن الكود مؤقتًا، يقوم APCu بتخزين نتائج العمليات الحسابية: البيانات من قاعدة البيانات، الكائنات المسلسلة، أجزاء HTML.
مثال على تخزين نتيجة استعلام SQL مؤقتًا:
// نحفظ البيانات لمدة 300 ثانية$key = 'users_list';$data = apcu_fetch($key, $success);
if (!$success) { $data = $db->query("SELECT * FROM users")->fetchAll(); apcu_store($key, $data, 300);}
return $data;APcu مثالي للتطبيقات ذات الصفحة الواحدة أو المشاريع ذات الخادم الواحد. ومع ذلك، يتم تخزين بياناته محليًا، وعند استخدام عدة خوادم (التوسع الأفقي)، ستحتاج إلى حل موزع.
Memcached: تخزين مؤقت موزع بسيط وسريع
Memcached هو نظام تخزين مؤقت عالي الأداء يعمل في الذاكرة العشوائية (RAM). تم إنشاؤه لتسريع تطبيقات الويب الديناميكية عن طريق تقليل الحمل على قواعد البيانات. المزايا الرئيسية هي البساطة والسرعة ودعم التخزين الموزع.
تثبيت إضافة PHP:
pecl install memcachedمثال على الاتصال والعمل:
$memcached = new Memcached();$memcached->addServer('localhost', 11211);
$key = 'article_123';$cached = $memcached->get($key);
if ($cached === false) { $article = getArticleFromDB(123); $memcached->set($key, $article, 3600); // تخزين مؤقت لمدة ساعة} else { $article = $cached;}Memcached لا يدعم هياكل البيانات المعقدة (فقط السلاسل والكائنات الثنائية)، لكنه يتعامل بشكل ممتاز مع مهمة التخزين المؤقت «التقليدي»: ضع البيانات بواسطة مفتاح، واسترجعها بواسطة مفتاح. من المهم تذكر أن Memcached لا يحتوي على استمرارية مدمجة — عند إعادة تشغيل الخادم، تُفقد جميع البيانات.
Redis: أداة قوية ومرنة للتخزين المؤقت
Redis ليس مجرد تخزين مؤقت، بل هو مخزن بيانات كامل في الذاكرة مع دعم للاستمرارية، والمعاملات، والهياكل المعقدة (القوائم، المجموعات، التجزئات، قوائم الانتظار). لمطور PHP، يعتبر Red