التخزين المؤقت في PHP: Redis وMemcached وAPCu والتخزين المؤقت للملفات

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

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

ابدأ الدورة

التخزين المؤقت في PHP: Redis وأدوات أخرى



التخزين المؤقت هو أحد الآليات الرئيسية لتحسين أداء تطبيقات الويب في PHP. التخزين المؤقت الذي تم إعداده بشكل صحيح يمكن أن يقلل وقت استجابة الخادم بمقدار 10-50 مرة، ويقلل الحمل على قاعدة البيانات ويقلل استهلاك الموارد. في هذه المقالة، سنناقش أربعة أساليب رئيسية للتخزين المؤقت في PHP: Redis وMemcached وAPCu والتخزين المؤقت الكلاسيكي للملفات.



لماذا نحتاج التخزين المؤقت في PHP؟



بدون التخزين المؤقت، يمكن لكل طلب PHP تنفيذ عشرات استعلامات SQL ومعالجة القوالب وتحميل البيانات الخارجية. يحافظ التخزين المؤقت على نتيجة عملية مكلفة (مثل استعلام قاعدة البيانات أو تحليل XML) ويقدمها مباشرة، متجاوزًا العمليات الحسابية المتكررة. حالات الاستخدام الرئيسية:



  • تخزين نتائج استعلامات SQL مؤقتًا — حفظ نتيجة استعلام SELECT لمدة 5-60 ثانية.
  • تخزين أجزاء HTML مؤقتًا — كتل قوائم جاهزة، أدوات، مسارات التنقل.
  • تخزين الجلسات مؤقتًا — تخزين بيانات الجلسة في Redis بدلاً من الملفات.
  • تخزين بيانات API مؤقتًا — ردود الخدمات الخارجية (الطقس، أسعار العملات).
  • تخزين Opcode مؤقتًا — تسريع تنفيذ كود PHP نفسه (OPcache).


1. Redis — ملك التخزين المؤقت في الذاكرة



Redis هو مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة" في الذاكرة مع دعم الهياكل المعقدة (القوائم، التجزئات، المجموعات). يوجد العديد من العملاء لـ PHP: predis/predis (PHP خالص) وext-redis (إضافة C).



مثال على التثبيت عبر Composer:

composer require predis/predis


مثال أساسي للتخزين المؤقت مع Redis:

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

$redis = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);

$cacheKey = 'user_list_page_1';$ttl = 300; // 5 دقائق

// محاولة الحصول على البيانات من التخزين المؤقتif ($redis->exists($cacheKey)) { $data = unserialize($redis->get($cacheKey)); echo "بيانات من التخزين المؤقت";} else { // عملية مكلفة (مثل استعلام SQL) $data = getUsersFromDatabase(1, 20); $redis->setex($cacheKey, $ttl, serialize($data)); echo "بيانات من قاعدة البيانات";}

print_r($data);


مزايا Redis: السرعة (ميلي ثانية)، دعم TTL، العمليات الذرية، Pub/Sub، الاستمرارية على القرص. العيوب: يتطلب خادمًا منفصلاً، استهلاك ذاكرة الوصول العشوائي.



2. Memcached — البساطة والسرعة



Memcached هو مخزن بيانات آخر شائع في الذاكرة، ولكن بدون هياكل بيانات معقدة. في PHP، يتم استخدام الإضافة memcached (لاحظ الحرف d — هذه نسخة أحدث).



تثبيت الإضافة:

sudo apt install php-memcached


مثال على العمل مع Memcached:

<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);

$key = 'article_42';$data = $memcached->get($key);

if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { $data = fetchArticleFromDB(42); $memcached->set($key, $data, 3600); // ساعة واحدة echo "استعلام إلى قاعدة البيانات";} else { echo "من التخزين المؤقت Memcached";}


متى تختار Memcached: إذا كنت بحاجة إلى تخزين مؤقت بسيط للسلاسل بدون هياكل معقدة، ولا تريد إعداد الاستمرارية. Memcached أسرع من Redis في عمليات get/set البسيطة، لكنه أقل في الوظائف.



3. APCu — التخزين المؤقت مباشرة في PHP



APCu (Alternative PHP Cache) هي إضافة لتخزين البيانات مؤقتًا في الذاكرة المشتركة لعملية PHP الحالية. لا تتطلب خادمًا منفصلاً

توصيات