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

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

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

ابدأ الدورة

التخزين المؤقت في 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

توصيات