0Pricing
PHP Academy · درس

أنماط إبطال التخزين المؤقت

طبّقوا استراتيجيات cache-aside وwrite-through والإبطال المستند إلى TTL

أنماط إبطال التخزين المؤقت درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

المشكلة الصعبة

"هناك شيئان صعبان فقط في علوم الحاسوب: إبطال التخزين المؤقت واختيار أسماء الأشياء." — Phil Karlton. إن معرفة وقت إبطال البيانات المخزنة مؤقتًا وطريقة ذلك أمر بالغ الأهمية.

انتهاء الصلاحية المستند إلى TTL (الخامل)

الاستراتيجية الأبسط: عيّن مدة TTL وتقبّل أن التخزين المؤقت قد يقدّم بيانات قديمة لمدة تصل إلى تلك المدة. وينجح ذلك عندما يكون التقادم الطفيف للبيانات مقبولًا.

<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automatically

الإبطال عند الكتابة

عند تحديث البيانات، احذف مفتاح التخزين المؤقت المقابل أو حدّثه فورًا.

<?php
function updateUser(int $id, array $data): void {
    User::find($id)->update($data);
    Cache::forget("user:$id");         // delete cache
    // Or re-warm:
    Cache::put("user:$id", User::find($id), 300);
}

وسم التخزين المؤقت

ضع وسوم على إدخالات التخزين المؤقت المرتبطة حتى تتمكن من إبطال مجموعة كاملة دفعةً واحدة، مثل جميع إدخالات التخزين المؤقت لمستخدم محدد.

<?php
// Store with tags:
Cache::tags(["user:1", "posts"])->put("user:1:recent-posts", $posts, 600);

// Invalidate all "user:1" entries:
Cache::tags("user:1")->flush();

الإبطال المستند إلى الأحداث

في Laravel، استخدم أحداث نماذج Eloquent لإبطال التخزين المؤقت تلقائيًا عند حفظ نموذج أو حذفه.

<?php
class User extends Model {
    protected static function booted(): void {
        static::saved(fn($u) => Cache::forget("user:{$u->id}"));
        static::deleted(fn($u) => Cache::forget("user:{$u->id}"));
    }
}

Cache-Aside مع الإصدارات

أضف رقم إصدار إلى مفاتيح التخزين المؤقت. تؤدي زيادة الإصدار إلى إبطال جميع الإدخالات الحالية فعليًا من دون حذفها.

<?php
$v   = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");

الانتهاء الاحتمالي المبكر (PER)

لمنع تهافت الطلبات على التخزين المؤقت، أعد حسابه قبل انتهاء صلاحيته بقليل لجزء من الطلبات. ويمنع ذلك انتهاء الصلاحية المتزامن على جميع الخوادم.

التحديث في الخلفية

تُعيد مهمة تعمل في الخلفية ملء إدخالات التخزين المؤقت التي يُكثر الوصول إليها قبل انتهاء صلاحيتها. وهكذا لا يصبح التخزين المؤقت فارغًا أبدًا، وتظل عمليات القراءة سريعة دائمًا.

التقديم القديم أثناء إعادة التحقق

قدّم البيانات القديمة فورًا أثناء تحديث التخزين المؤقت بشكل غير متزامن في الخلفية. ويزيل ذلك الارتفاعات المفاجئة في زمن الاستجابة الناتجة عن فقدان التخزين المؤقت.

إبطال التخزين المؤقت الموزع

في إعداد متعدد الخوادم، لا يؤدي إبطال خادم لمفتاح تخزين مؤقت إلى مسح النسخ المحلية في الخوادم الأخرى تلقائيًا. استخدم النشر والاشتراك في Redis أو مخزنًا مشتركًا لبث عمليات الإبطال.

هرمية التخزين المؤقت

أنشئ طبقات للتخزين المؤقت: تخزين مؤقت محلي داخل العملية (APCu) أمام تخزين مؤقت موزع (Redis). يكون التخزين المحلي أسرع، لكن يجب إبطاله عبر جميع المثيلات عند تغيّر البيانات.

ملخّص

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

تحقق سريع

ماذا تفعل ‎Cache::tags()->flush()‎؟

الأسئلة الشائعة

هل درس «أنماط إبطال التخزين المؤقت» مجاني؟

نعم — نص درس «أنماط إبطال التخزين المؤقت» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «أنماط إبطال التخزين المؤقت»؟

طبّقوا استراتيجيات cache-aside وwrite-through والإبطال المستند إلى TTL تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «أنماط إبطال التخزين المؤقت»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا تُعدّ التخزينات المؤقتة مهمة في PHP
  2. Redis كخلفية للتخزين المؤقت في PHP
  3. Memcached لتخزين الجلسات والكائنات مؤقتًا
  4. أنماط إبطال التخزين المؤقت
← العودة إلى PHP Academy