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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

1. الحلول المدمجة: OPcache وAPCu

\n\n

قبل توصيل الخدمات الخارجية، من الأفضل استخدام ما هو موجود بالفعل في PHP بأقصى قدر من الكفاءة. تعمل الآليات المدمجة على مستوى المفسر ولا تتطلب تثبيت برامج إضافية.

\n\n

1.1. OPcache

\n

يقوم OPcache (المعروف سابقًا باسم Zend Optimizer+) بتجميع نصوص PHP وحفظها كبايت كود في الذاكرة المشتركة. هذا يلغي الحاجة إلى تحليل وتجميع الكود مع كل طلب. بالنسبة لمعظم مشاريع الإنتاج، يكون OPcache مفعلًا افتراضيًا، لكن تكوينه يعتبر أمرًا بالغ الأهمية.

\n\n

الإعدادات الموصى بها في php.ini:

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

هام: في وضع التطوير، قم بتعيين opcache.revalidate_freq=0 و opcache.validate_timestamps=1 لتطبيق التغييرات في الملفات فورًا.

\n\n

1.2. APCu (APC User Cache)

\n

يوفر APCu كاشًا للمستخدم في الذاكرة المشتركة. إنه مثالي لتخزين البيانات الصغيرة التي يتم طلبها بشكل متكرر: نتائج الحسابات، الإعدادات، أجزاء HTML.

\n\n

مثال على استخدام APCu:

\n
// حفظ البيانات في الكاش لمدة 300 ثانية\napcu_store('user_profile_' . $userId, $profileData, 300);\n\n// استرجاع البيانات\nif (apcu_exists('user_profile_' . $userId)) {\n    $profile = apcu_fetch('user_profile_' . $userId);\n} else {\n    // توليد البيانات\n    $profile = getUserProfileFromDB($userId);\n    apcu_store('user_profile_' . $userId, $profile, 300);\n}
\n\n

القيود: يعمل APcu فقط ضمن خادم واحد. في البنية العنقودية، لا تتم مزامنته بين العقد، مما يجعله غير مناسب للأنظمة الموزعة.

\n\n

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

\n\n

Memcached هو نظام تخزين مؤقت موزع في الذاكرة العشوائية. ميزته الرئيسية هي السرعة العالية والبساطة. لا يدعم Memcached الثبات (يتم تخزين البيانات فقط في RAM) وليس لديه آليات مدمجة للتكرار، مما يجعله مثاليًا للكاش المؤقت.

\n\n

2.1. الاتصال والاستخدام الأساسي

\n
// إنشاء اتصال\n$memcached = new Memcached();\n$memcached->addServer('localhost', 11211);\n\n// حفظ البيانات مع TTL لمدة 600 ثانية\n$memcached->set('user_123', ['name' => 'إيفان', 'email' => 'ivan@example.com'], 600);\n\n// استرجاع البيانات\n$user = $memcached->get('user_123');\nif ($memcached->getResultCode() === Memcached::RES_NOTFOUND) {\n    // البيانات غير موجودة - تحميل من قاعدة البيانات\n    $user = fetchUserFromDB(123);\n    $memcached->set('user_123', $user, 600);\n}
\n\n

2.2. التقنيات المتقدمة مع Memcached

\n
    \n
  • CAS (Check And Set): يسمح بتحديث البيانات بشكل ذري، وتجنب حالة السباق.
  • \n
  • Multi-get: استرجاع المفاتيح بشكل جماعي يقلل من عدد استدعاءات الشبكة.
  • \n
  • الزيادات: للعدادات (مثل عدد المشاهدات) استخدم $memcached->increment().
  • \n
\n\n


                
                

المدونات

توصيات الكتب