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

Redis / الأساسي: المفاتيح والبنى المحدودة / الدرس 2

السلاسل والعدادات وSET الشرطية

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

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

أهداف الدرس

  • شرح تسلسل السلسلة وحدود العداد الصحيح.
  • اختيار الخيارات الذرية وتفسير نتائج الشرط.

تخزن السلسلة بايتات لا تصريح نوع تطبيق

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

استخدم عملية الخادم للزيادة الذرية الواحدة

افترض غياب العداد، فتبدأ INCR من صفر وتعيد1 ثم تضيف INCRBY أربعاً فتعيد5. قد تفقد قراءة وحساب وSET زيادة متزامنة بخلاف العملية الذرية. الردود مستنتجة دون خادم، ولا تفرض هوية الطلب؛ قد تزيد إعادة العملية الجديدة مرة أخرى لحدث تجاري واحد.

redis تسلسل عداد توضيحي لمفتاح غائب
INCR lab:visits
INCRBY lab:visits 4
GET lab:visits
الناتج المتوقع
1
5
5

المتوقع الصحيح1 ثم5 وسلسلة5 مع غياب سابق وعدم كاتب آخر.

اجمع القيمة والانتهاء بأمر واحد

تدعم SET الشرط والانتهاء بصياغة إصدار. يجمع NX EX الإنشاء عند الغياب والانتهاء دون فجوة أمرين. فشل NX عدم تطبيق عادي لا فشل اتصال. النجاح لبنة لا ضمان إقصاء موزع مع كل فشل أو انتهاء. راجع رمز الملكية والتحرير والانتهاء وfencing ولا تستخدم قيمة قفل ثابتة كوصفة عامة.

أظهر فقد التحديث دون تشغيل خدمة

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

python نموذج حساب محلي لفقد التحديث
initial = 10
a_read = initial
b_read = initial
naive = a_read + 1
naive = b_read + 1
atomic_model = initial
atomic_model += 1
atomic_model += 1
assert naive == 11
assert atomic_model == 12

يصف التحققان الجدول المختار فقط دون Redis أو إثبات بروتوكول كامل.

اعرف أثر الكتابة في TTL الموجودة

تستبدل SET العادية السلسلة وتزيل انتهاءها عادة ما لم تستخدم خيارات مناسبة. يختلف التعديل مثل INCR فلا تعمم حفظ TTL أو إعادة ضبطها. تتوفر KEEPTTL منذ6.0 وتختار بوعي، وتضيف8.4 مقارنة قيمة وحذفاً مقارناً خارج أساس8.2 هنا. تحقق من الدعم قبل نسخ صيغة حديثة لخدمة أقدم أو مقيدة.

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

ERR value is not an integer or out of range

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

يفقد العداد أحداثاً متزامنة

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

تصبح القيمة المجددة بلا انتهاء

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

اختبر فهمك

1. يزيد عميلان مفتاحاً صحيحاً. لماذا تفضل INCR على القراءة والحساب؟

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

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

2. تعاد كتابة رمز قصير العمر بـSET عادية. ماذا يفحص الاختبار؟

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

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

أهم ما تعلمته

  • تمنع ذرية الحساب الفقد ولا تمنع تكرار الحدث.
  • شرط SET وTTL لبنات صريحة ذات إصدار.

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