التخزين المؤقت في PHP: Redis وMemcached والحلول المدمجة من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا التخزين المؤقت هو أساس أداء PHP

\n\n

كل مطور PHP يواجه عاجلاً أم آجلاً مشكلة الأداء. بطء تحميل الصفحات، ارتفاع استهلاك ذاكرة الخادم، والطلبات المتكررة لقاعدة البيانات هي أعراض لغياب التخزين المؤقت الجيد. في تطوير الويب الحديث، التخزين المؤقت ليس ترفاً بل ضرورة. فبدونه، حتى الكود الأكثر تحسيناً سيبطئ تحت الأحمال العالية.

\n\n

في هذه المقالة، سنستعرض ثلاثة أساليب رئيسية للتخزين المؤقت في PHP: Redis وMemcached والحلول المدمجة (APCu وOPcache والتخزين المؤقت في الملفات). ستتعلم كيفية اختيار الأداة المناسبة لمهمة محددة، وسترى أمثلة عملية على الكود، وستحصل على توصيات عملية للتطبيق.

\n\n

1. الحلول المدمجة في PHP: APCu وOPcache والتخزين المؤقت في الملفات

\n\n

1.1. OPcache — تخزين مؤقت للبايت كود

\n\n

OPcache هي آلية مدمجة في PHP تقوم بتجميع وحفظ البايت كود المُجمّع للنصوص البرمجية في الذاكرة. بدلاً من تحليل وتجميع ملف PHP في كل مرة، يستخدم OPcache النتيجة الجاهزة. وهذا يعطي زيادة في السرعة تصل إلى 30-50% دون كتابة سطر واحد من الكود.

\n\n

الإعداد في php.ini:

\n
opcache.enable=1\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.revalidate_freq=2
\n\n

للتحقق من عمل OPcache استخدم الدالة:

\n
<?php\nvar_dump(opcache_get_status());\n?>
\n\n

1.2. APCu — تخزين مؤقت للبيانات في الذاكرة

\n\n

APCu (Alternative PHP Cache) هي إضافة لتخزين البيانات العشوائية في الذاكرة المشتركة. مثالية لتخزين نتائج العمليات الحسابية الثقيلة، الإعدادات، أو البيانات التي نادراً ما تتغير.

\n\n

مثال على التخزين المؤقت باستخدام APCu:

\n
<?php\n// حفظ البيانات في الكاش لمدة 3600 ثانية (ساعة واحدة)\n$data = ['users' => 1500, 'status' => 'active'];\napcu_store('app_stats', $data, 3600);\n\n// القراءة من الكاش\n$cached = apcu_fetch('app_stats');\nif ($cached === false) {\n    // البيانات غير موجودة في الكاش — نعيد حسابها\n    $cached = computeExpensiveData();\n    apcu_store('app_stats', $cached, 3600);\n}\n?>
\n\n

1.3. التخزين المؤقت في الملفات — بداية بسيطة بدون إضافات إضافية

\n\n

إذا لم تكن هناك إمكانية لتثبيت Redis أو Memcached، استخدم نظام الملفات. هذا أبطأ، لكنه يعمل على أي استضافة.

\n\n
<?php\nclass FileCache {\n    private $cacheDir;\n    \n    public function __construct($dir = '/tmp/php_cache/') {\n        $this->cacheDir = $dir;\n        if (!is_dir($dir)) {\n            mkdir($dir, 0777, true);\n        }\n    }\n    \n    public function get($key, $ttl = 3600) {\n        $file = $this->cacheDir . md5($key) . '.cache';\n        if (!file_exists($file)) return null;\n        \n        if (time() - filemtime($file) > $ttl) {\n            unlink($file);\n            return null;\n        }\n        \n        return unserialize(file_get_contents($file));\n    }\n    \n    public function set($key, $data) {\n        $file = $this->cacheDir . md5($key) . '.cache';\n        file_put_contents($file, serialize($data));\n    }\n}\n\n// الاستخدام\n$cache = new FileCache();\n$result = $cache->get('expensive_query');\nif ($result === null) {\n    $result = $db->query('SELECT ...');\n    $cache->set('expensive_query', $result);\n}\n?>
\n\n

2. Memcached — تخزين مؤقت موزع للأحمال العالية

\n\n

2.1. ما هو Memcached ومتى يتم استخدامه

\n\n

Memcached هو نظام تخزين مؤقت موزع في الذاكرة العشوائية. يعمل وفق مبدأ key-value وهو مثالي لتخزين نتائج استعلامات SQL وجلسات المستخدمين وأجزاء HTML. المزايا الرئيسية:

\n
    \n
  • سهولة التثبيت والإعداد
  • \n
  • سرعة عالية

المدونات

توصيات الكتب