مقدمة: لماذا التخزين المؤقت هو أساس تطبيق PHP سريع
كل مطور PHP يواجه عاجلاً أم آجلاً مشكلة الأداء. عندما تبدأ قاعدة البيانات في التباطؤ، وتستغرق الصفحات من 3 إلى 5 ثوانٍ للتحميل، أول ما يتبادر إلى الذهن هو التخزين المؤقت. هذا ليس مجرد "حفظ البيانات في مكان ما"، بل هو فلسفة كاملة للتحسين.
في هذه المقالة، سنستعرض جميع الأساليب الشائعة للتخزين المؤقت في PHP: من التخزين المؤقت البسيط للملفات إلى الحلول الصناعية باستخدام Redis وMemcached. ستتعلم كيفية اختيار الأداة المناسبة وتجنب الأخطاء النموذجية. هيا بنا!
1. آليات التخزين المؤقت المدمجة في PHP
1.1. التخزين المؤقت للكود الوسيط: OPcache
قبل الحديث عن المخازن الخارجية، يجدر التذكير أن PHP نفسه قادر على تخزين كوده مؤقتاً. آلية OPcache تحفظ البرامج النصية المترجمة في الذاكرة العشوائية، مما يعفي PHP من الحاجة إلى تحليل وتجميع الملفات في كل مرة.
تفعيل OPcache في ملف php.ini:
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=2هذا هو خط الدفاع الأول. بدون OPcache، سيكون أي تخزين مؤقت آخر أقل فعالية.
1.2. APCu — تخزين مؤقت للمستخدم في الذاكرة
APCu (Alternative PHP Cache) هو إضافة لتخزين بيانات عشوائية في الذاكرة المشتركة لعملية PHP. مثالي للمشاريع الصغيرة التي لا تتطلب تخزيناً مؤقتاً موزعاً.
مثال على العمل مع APCu:
<?php// حفظ البيانات لمدة 5 دقائقapcu_store('my_key', ['data' => 'value'], 300);
// قراءة البيانات$data = apcu_fetch('my_key');if ($data === false) { echo "لم يتم العثور على الكاش، يتم إنشاؤه من جديد";}
// حذف المفتاحapcu_delete('my_key');?>الإيجابيات: سرعة فائقة، بساطة. السلبيات: البيانات تعيش فقط ضمن خادم واحد.
2. Memcached: البساطة والسرعة
2.1. ما هو Memcached ولماذا هو مطلوب
Memcached هو نظام تخزين مؤقت موزع في الذاكرة العشوائية. تم إنشاؤه لتسريع تطبيقات الويب الديناميكية عن طريق تقليل الحمل على قواعد البيانات. على عكس APCu، يعمل Memcached كخادم منفصل يمكن الاتصال به من مثيلات PHP مختلفة.
2.2. تثبيت وربط Memcached
أولاً، قم بتثبيت خادم Memcached:
sudo apt install memcachedsudo systemctl start memcachedثم قم بتثبيت إضافة PHP:
sudo pecl install memcachedالآن يمكنك العمل مع الكاش:
<?php$memcached = new Memcached();$memcached->addServer('localhost', 11211);
// حفظ لمدة 10 دقائق$memcached->set('user_123', ['name' => 'إيفان', 'email' => 'ivan@example.com'], 600);
// قراءة$user = $memcached->get('user_123');if ($user === false) { // تحميل من قاعدة البيانات}?>2.3. متى تختار Memcached
- عند الحاجة إلى مخزن بسيط من نوع مفتاح-قيمة
- عندما تكون البيانات ذات عمر قصير (جلسات، بيانات مؤقتة)
- عند عدم الحاجة إلى الاستمرارية (Memcached لا يحفظ البيانات على القرص)
3. Redis: أداة قوية للسيناريوهات المعقدة
3.1. لماذا Redis أفضل من Memcached؟
Redis ليس مجرد كاش، بل هو قاعدة بيانات كاملة في الذاكرة تدعم هياكل بيانات معقدة: القوائم، المجموعات، التجزئات، الخرائط البتية. على عكس Memcached، يدعم Redis:
- الاستمرارية — البيانات لا تختفي عند إعادة التشغيل
- المعاملات ونصوص Lua
- Pub/Sub لتبادل الرسائل
- النسخ المتماثل والتجميع
3.2. أمثلة على العمل مع Redis في PHP
للعمل مع Redis، استخدم