التخزين المؤقت في PHP: Redis وMemcached والحلول المدمجة
التخزين المؤقت هو أحد الأدوات الرئيسية لتحسين أداء تطبيقات الويب. في PHP، يتوفر للمطور عدة طرق: من التخزين المؤقت البسيط للملفات إلى أنظمة الذاكرة القوية مثل Redis وMemcached. في هذه المقالة، سنشرح بالتفصيل كل خيار، ونقدم أمثلة على الكود، ونساعدك في اختيار الحل الأمثل لمشروعك.
لماذا نحتاج التخزين المؤقت؟
بدون التخزين المؤقت، قد يؤدي كل طلب إلى الموقع إلى عمليات حسابية متكررة، أو استعلامات لقاعدة البيانات، أو واجهات برمجة تطبيقات خارجية. يسمح التخزين المؤقت بحفظ نتيجة عملية مكلفة وإعادتها من مخزن سريع. حالات الاستخدام الرئيسية:
- حفظ نتائج استعلامات SQL (خاصة التجميعات والانضمامات).
- التخزين المؤقت لأجزاء HTML (مثل القوائم والأشرطة الجانبية).
- تخزين جلسات المستخدمين.
- التخزين المؤقت لاستجابات واجهات برمجة التطبيقات الخارجية.
1. Redis — ملك التخزين المؤقت في الذاكرة
Redis هو مخزن بيانات عالي الأداء في الذاكرة، يدعم هياكل البيانات: السلاسل، القوائم، التجزئات، المجموعات. بالنسبة لـ PHP، هناك عدة عملاء، أشهرها predis/predis (PHP نقي) وphpredis (إضافة بلغة C).
التثبيت
composer require predis/predisمثال: التخزين المؤقت لنتيجة استعلام قاعدة البيانات
<?phprequire 'vendor/autoload.php';
use Predis\\Client;
$redis = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);
function getUsersFromDb() { // محاكاة استعلام طويل sleep(2); return ['user1', 'user2', 'user3'];}
$cacheKey = 'users:all';$cached = $redis->get($cacheKey);
if ($cached) { $users = json_decode($cached, true); echo "من التخزين المؤقت: ";} else { $users = getUsersFromDb(); $redis->setex($cacheKey, 3600, json_encode($users)); // TTL ساعة واحدة echo "من قاعدة البيانات: ";}
print_r($users);الإمكانيات الرئيسية لـ Redis:
setex()— تعيين مفتاح مع وقت حياة (TTL).expire()— تعيين TTL لمفتاح موجود.del()— حذف مفتاح.incr()— زيادة ذرية (عدادات).
2. Memcached — البساطة والسرعة
Memcached هو نظام آخر شائع للتخزين المؤقت في الذاكرة، لكنه على عكس Redis، يدعم فقط القيم النصية وليس لديه هياكل بيانات مدمجة. ومع ذلك، للتخزين المؤقت البسيط، يعمل بشكل أسرع بسبب البساطة.
تثبيت الإضافة
sudo apt install php-memcached# أو عبر pecl:pecl install memcachedمثال: التخزين المؤقت لجزء HTML
<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);
function renderMenu() { // توليد مكلف للقائمة return '<nav><ul><li>الرئيسية</li></ul></nav>';}
$menuHtml = $memcached->get('menu:main');if ($menuHtml === false) { $menuHtml = renderMenu(); $memcached->set('menu:main', $menuHtml, 600); // TTL 10 دقائق}
echo $menuHtml;هام: Memcached لا يدعم TTL بالثواني افتراضيًا — يتم تحديد الوقت بالثواني (عدد صحيح). إذا تم تمرير 0، سيتم تخزين التخزين المؤقت إلى الأبد.
3. APCu — التخزين المؤقت المدمج في PHP
APCu (Alternative PHP Cache) هي إضافة للتخزين المؤقت للبيانات في الذاكرة المشتركة لخادم واحد. مثالية للتطبيقات ذات الصفحة الواحدة والمشاريع الصغيرة.
التثبيت
sudo apt install php-apcuمثال: التخزين المؤقت للتكوين
<?php$configKey = 'app:config';
if أيضاً في المكتبة
إرسال البريد الإلكتروني بلغة Rust: مكتبتا lettre وasync-smtp للقوائم البريدية
Java لتحديد المواقع والخرائط: المكتبات، واجهات برمجة التطبيقات والأمثلة
توليد PDF في Rust: نظرة عامة على المكتبات والأدوات لإنشاء مستندات PDF
معالجة Markdown في Node.js: المكتبات marked و showdown و remarkable
مكتبات WebSocket لـ Node.js: ws، Socket.IO، uWS — مراجعة شاملة