محتويات الدورة

NestJS / المتوسط: السياسات والموائمات والمصادر / الدرس 12

هوية المخبأ والحداثة وميزانية المصدر

خزن تمثيلاً مقصوداً للجمهور الصحيح وقيد عمل إعادة ملئه.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • ميز حفظ الطلب والمخبأ المشترك وتخزين رد HTTP.
  • حدد نطاق المفتاح ووحدة TTL والإبطال والبديل المحدود صراحة.

سم عقد المخبأ وسلطته

توفر تكاملات المخبأ آليات لا سياسة حداثة أو تفويض تلقائية. تختلف هوية وعمر حفظ الطلب والكيان المشترك ورد HTTP. حدد هل القيمة عامة أو للمستأجر أو للهوية قبل المفتاح. قد يكون URL وحده غير آمن لرد شخصي بالمسار نفسه. افصل الصلاحية المعتمدة عن وصف قديم ووثق الغياب. تختلف خسارة المخبأ وغياب المصدر وفشله؛ يخفى الانقطاع أو خطأ السياسة عند تحويلها لبطاقة فارغة واحدة. يبدأ التصميم بعقد ما يخزن لا بإضافة معترض عام لكل قراءة ثم بحث مفتاح لاحقاً.

سجل النطاق والوحدة قبل تركيب مخزن

تعلن JSON مخبأ بطاقة للمستأجر ووحدة ميلي ثانية صريحة. تحقق من إصدارات Nest وcache-manager والمخزن ومعنى الوحدة، ولا تنسخ أرقام مثال قديم. تختلف التسلسلات والانتهاء والخطأ والديمومة، وليس بديل ذاكرة كمخزن مشترك. ليس السجل إعداد حزمة، ولا يجعل حالة النشر المخزنة سلطة للوصول. احفظ الإصدار والجمهور ونسخة الشكل وراجع الإبطال مع كل كاتب. يفيد إعلان الوحدة في منع تمديد عمر قيمة حساسة ألف مرة بسبب انتقال حزمة غيرت تفسير العدد دون انتباه.

json عقد مخبأ اصطناعي
{"scope":"tenant-card","keyParts":["tenantId","courseId","schemaVersion"],"ttlUnit":"milliseconds-must-match-store","authority":"descriptive-cache-only","refill":"bounded-source-work","store":"not-configured-by-this-record"}

يعرف افتراضات مراجعة ولا ينشئ مخبأ أو يضع TTL أو يستدعي مصدراً.

اختبر هوية الجمهور مستقلة عن التخزين

تبني الدالة مفاتيح غير ملتبسة بتشفير JSON لأجزاء اصطناعية، وتميز مستأجرين للمقرر نفسه ونسختي شكل. المفتاح تنسيق لا تفويض؛ تتحقق الخدمة من المستدعي والأهلية. قد يقيد المخزن الطول والمحارف فكيف الترميز بقصد. لا تضمن رمزاً خاماً أو معلومة شخصية في مفتاح يظهر بالسجلات. تثبت التأكيدات الاتفاق الحتمي لا عزل مخبأ أو انتهاء خلفية عاملة. قد تكون المفاتيح مختلفة بينما مسار قراءة آخر يستخدم مفتاحاً قديماً غير منضبط، لذلك تحتاج بقية المنتجين والمستهلكين الاتفاق نفسه.

javascript نموذج محلي كامل لمفتاح المخبأ
function cardKey(tenant,id,version) {return JSON.stringify(["course-card",tenant,id,version]);}
console.assert(cardKey("lab-a","c1",1) !== cardKey("lab-b","c1",1));
console.assert(cardKey("lab-a","c1",1) !== cardKey("lab-a","c1",2));
console.assert(cardKey("lab-a","c1",1) === '["course-card","lab-a","c1",1]');

ينتج تغير المستأجر أو الشكل مفتاحاً مختلفاً حتمياً دون cache-manager أو مخزن.

راجع الملء القديم ومعنى الفشل

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

قيد الفقد والإعادة وتزامن المصدر

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

الأخطاء الشائعة وإصلاحها

يشترك مستخدمان في رد خاص مخزن

لماذا يحدث؟
أغفل مفتاح المخبأ أبعاد الجمهور التي تحدد لمن تنتمي البيانات.
كيف تصلحه؟
أدرج النطاق المطلوب أو تجنب المخبأ المشترك لذلك التمثيل.
كيف تتجنب تكراره؟
اختبر المسار نفسه بهويات مستدعين مختلفة.

يصبح خطأ المصدر نتيجة فارغة طويلة

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

تبقي TTL البيانات أطول بكثير من المقصود

لماذا يحدث؟
افترضت وحدة وقت المخزن اعتماداً على تكامل أو مثال أقدم.
كيف تصلحه؟
تحقق من دلالة الوحدة في الحزمة والمخزن وحولها صراحة.
كيف تتجنب تكراره؟
سجل الوحدات واحتفظ بعينات تختبر حد الانتهاء الزمني.

اختبر فهمك

1. هل تفوض إضافة tenantId إلى مفتاح المخبأ الوصول إلى بيانات ذلك المستأجر؟

اعرض الحل المشروح

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

2. لماذا لا تثبت TTL قصيرة الاتساق بعد إبطال قيمة مخزنة؟

اعرض الحل المشروح

قد تنتهي قراءة قديمة كانت قيد التنفيذ بعد الإبطال وتملأ المخبأ ببيانات قديمة مجدداً. يمكن لـTTL أن تحد عمر هذا المدخل، لكن السباق يظل قائماً. راجع التداخلات المسموحة وفحوص نسخة المصدر وفق متطلبات الحداثة. لا تعرض الانتهاء الزمني باعتباره معاملة أو ضماناً لترتيب القراءات والكتابات.

أهم ما تعلمته

  • يحتاج نطاق المخبأ ووحدته وحداثته عقوداً صريحة.
  • قيد بديل المخبأ دون إضعاف قرارات السلطة.

المراجع الرسمية