التخزين المؤقت في PHP: Redis وMemcached والحلول المضمنة — تسريع تطبيقات الويب
يواجه كل مطور PHP مشكلة الأداء: استجابة قاعدة البيانات بطيئة، تحميل الصفحات يستغرق وقتًا طويلاً، والخادم يختنق تحت الحمل. يكمن حل هذه المشكلات في التخزين المؤقت الفعال. في هذه المقالة، سنستعرض ثلاثة أساليب رئيسية للتخزين المؤقت في PHP: الآليات المضمنة (APCu, OpCache)، والخوادم الخارجية Memcached وRedis. ستتعرف على متى تختار أي أداة، وستحصل على أمثلة جاهزة من الكود للتطبيق.
1. الحلول المضمنة: OpCache وAPCu
لنبدأ بالأبسط — التخزين المؤقت على مستوى محرك PHP. هنا يتم تمييز مكونين رئيسيين.
1.1. OpCache (ذاكرة التخزين المؤقت لـ opcode في PHP)
OpCache مدمج في PHP بدءًا من الإصدار 5.5. يقوم بتخزين البايت كود المترجم (opcode) لنصوص PHP البرمجية. بدونه، يقوم كل طلب بتحليل وتجميع الكود المصدري من جديد — وهذا إهدار للموارد. يؤدي تفعيل OpCache إلى زيادة السرعة بنسبة تصل إلى 30-50% دون كتابة سطر واحد من الكود.
الإعداد في php.ini:
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=601.2. APCu (ذاكرة التخزين المؤقت البديلة لـ PHP للمستخدم)
APCu هي ذاكرة تخزين مؤقت للبيانات المخصصة للمستخدم (المتغيرات، نتائج العمليات الحسابية). تعمل في الذاكرة العشوائية (RAM) وهي مثالية لتخزين البيانات الصغيرة التي يتم طلبها بشكل متكرر: الإعدادات، الترجمات، نتائج استعلامات SQL البسيطة.
مثال على العمل مع APCu:
<?php// حفظ البيانات في ذاكرة التخزين المؤقت لمدة 300 ثانيةapcu_store('site_config', $config, 300);
// الحصول على البيانات من ذاكرة التخزين المؤقت$cached = apcu_fetch('site_config');if ($cached === false) { // لا توجد بيانات — نقوم بالتحميل والحفظ $cached = loadConfigFromDB(); apcu_store('site_config', $cached, 300);}
// حذف المفتاحapcu_delete('site_config');?>المزايا: لا يتطلب خدمات خارجية، سهل الإعداد، زمن وصول ضئيل. العيوب: يعمل فقط على خادم واحد، تُفقد البيانات عند إعادة تشغيل PHP-FPM.
2. Memcached — تخزين مؤقت موزع للبيانات البسيطة
Memcached هو نظام تخزين مؤقت موزع عالي الأداء في الذاكرة العشوائية. إنه مثالي لتخزين أزواج "مفتاح-قيمة" البسيطة والجلسات. على عكس APCu، يعمل Memcached كخادم منفصل ويمكن أن يكون مشتركًا بين عدة خوادم ويب.
تثبيت الإضافة: pecl install memcached
مثال على الاتصال والعمل:
<?php$memcached = new Memcached();$memcached->addServer('localhost', 11211);
// تعيين مع TTL (مدة الحياة) 600 ثانية$memcached->set('user_123_profile', $profileData, 600);
// الاسترجاع$profile = $memcached->get('user_123_profile');if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { // خطأ في ذاكرة التخزين المؤقت — نقوم بالتحميل من قاعدة البيانات $profile = getUserProfileFromDB(123); $memcached->set('user_123_profile', $profile, 600);}
// تخزين الجلسات مؤقتًا (الإعداد في php.ini)// session.save_handler = memcached// session.save_path = "localhost:11211"?>متى تستخدم Memcached:
- التخزين المؤقت لنتائج استعلامات SQL (قوائم المنتجات، الفئات)
- تخزين جلسات المستخدمين في بيئة موزعة
- التخزين المؤقت لكتل HTML (مثل القائمة أو التذييل)
القيود: لا توجد هياكل بيانات مدمجة (سلاسل نصية فقط)، الحد الأقصى لحجم القيمة هو 1 ميجابايت (يمكن زيادته)، لا يوجد استمرارية — عند إعادة تشغيل الخادم، يتم مسح ذاكرة التخزين المؤقت.
3. Redis — تخزين مؤقت متقدم مع هياكل بيانات
Redis ليس مجرد ذاكرة تخزين مؤقت، بل هو مخزن بيانات كامل في الذاكرة مع دعم لأنواع معقدة: القوائم، المجموعات، التجزئات، المجموعات المرتبة. وهو يدعم الاستمرارية (الحفظ على القرص)،