التخزين المؤقت للبيانات في PHP: الإسعافات الأولية لخادمك
\n\nتخيل: تزور موقعك المفضل، ويستغرق التحميل وقتًا طويلاً. هل هذا مألوف؟ غالبًا لا يكون السبب هو استضافة ضعيفة أو تصميم "ثقيل"، بل أن الخادم يقوم بنفس العمل في كل مرة. فهو يتصل بقاعدة البيانات من جديد، ويعيد تجميع كود HTML، ويعيد حساب الإحصائيات.
\n\nحل هذه المشكلة هو التخزين المؤقت في PHP. إنه مثل طهي وجبة للأسبوع مقدمًا: تستهلك الوقت مرة واحدة، ثم تقوم فقط بتسخينها. في عالم تطوير الويب، يُسمى هذا "التخزين المؤقت للبيانات". يمكن لـ PHP cache المُهيأ بشكل صحيح أن يُسرّع الموقع بمقدار 10–50 مرة ويقلل الحمل على الخادم إلى الحد الأدنى.
\n\nفي هذه المقالة، سنستعرض أنواع التخزين المؤقت الموجودة، وكيفية تنفيذها باستخدام PHP، ومتى تختار الأداة المناسبة. هيا بنا!
\n\nلماذا التخزين المؤقت أمر لا غنى عنه لأي مشروع PHP؟
\n\nأي موقع ديناميكي يعمل بـ PHP يتبع المخطط: طلب → معالجة → استجابة. أغلى عملية هي العمل مع قاعدة البيانات (MySQL, PostgreSQL) وتوليد صفحات HTML المعقدة. إذا كان لديك 1000 زائر في الساعة، وكل طلب يقوم بـ 10 استعلامات SQL، فسيُصاب الخادم بالتوقف بسرعة.
\n\nيحل التخزين المؤقت في PHP ثلاث مشاكل رئيسية:
\n\n- \n
- السرعة — يتم إرجاع البيانات من الذاكرة أو من ملف في أجزاء من الثانية؛ \n
- توفير الموارد — يرتاح المعالج وقاعدة البيانات؛ \n
- قابلية التوسع — يتحمل الموقع زيادة حركة المرور دون ترقية الأجهزة. \n
ولا يهم إذا كنت تكتب بلغة PHP الخالصة أو تستخدم إطار عمل (Laravel, Symfony, Yii2) — فمبادئ التخزين المؤقت للبيانات متشابهة في كل مكان.
\n\nالأنواع الرئيسية للتخزين المؤقت في PHP
\n\nقبل كتابة الكود، دعنا نفهم ما يمكننا تخزينه مؤقتًا بالضبط. هناك ثلاثة مستويات رئيسية:
\n\n1. تخزين الصفحات مؤقتًا (Page Cache)
\nأبسط وأكثر أنواع التخزين فعالية. يتم حفظ كود HTML الجاهز للصفحة في ملف أو في الذاكرة. عند الطلب المتكرر، يُرجع الخادم HTML الجاهز، متجاوزًا مفسر PHP وقاعدة البيانات. مثالي للصفحات الثابتة (الصفحة الرئيسية، المدونة، الكتالوج).
\n\n2. تخزين البيانات والكائنات مؤقتًا (Data/Object Cache)
\nيتم حفظ نتائج العمليات الحسابية الثقيلة، واستعلامات قاعدة البيانات، واستجابات API. على سبيل المثال، قائمة أحدث المقالات، أسعار العملات، تقييمات المستخدمين. هذا ما يُسمى عادةً التخزين المؤقت للبيانات.
\n\n3. تخزين الكود مؤقتًا (Opcode Cache)
\nيتم تجميع نصوص PHP إلى كود بايت. أدوات مثل OPcache تحفظ هذا الكود البايت في الذاكرة، لتجنب تجميع نفس النص في كل طلب. يتم تفعيله على مستوى الخادم ولا يتطلب كتابة كود.
\n\nفي هذه المقالة، سنركز على النوعين الأولين، حيث يمكن التحكم بهما من خلال الكود في PHP.
\n\nتنفيذ التخزين المؤقت في PHP: من البسيط إلى المعقد
\n\nالتخزين المؤقت للملفات يدويًا
\nأبسط طريقة للتخزين المؤقت في PHP هي حفظ البيانات في ملفات. هذا لا يتطلب تثبيت إضافات إضافية ويعمل على أي استضافة.
\n\nإليك مثال لفئة بسيطة للتخزين المؤقت للملفات:
\n\n<?php\nclass FileCache\n{\n private $cacheDir;\n\n public function __construct($cacheDir = '/tmp/php-cache/')\n {\n $this->cacheDir = $cacheDir;\n if (!is_dir($this->cacheDir)) {\n mkdir($this->cacheDir, 0755, true);\n }\n }\n\n public function set($key, $data, $ttl = 3600)\n {\n $file = $this->getFilePath($key);\n $content = [\n 'expires' => time() + $ttl,\n 'data' => $data\n ];\n file_put_contents($file, serialize($content));\n }\n\n public function get($key)\n {\n $file = $this->getFilePath($key);\n if (!file_exists($file)) {\n return null;\n }\n $content = unserialize(file_get_contents($file));\n if ($content['expires'] < time(