0Pricing
Lua Academy · درس

العمليات الذرية والمعاملات

استخدم نصوص Lua لتنفيذ عمليات Redis الذرية متعددة الخطوات

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

لماذا العمليات الذرّية متعددة الخطوات؟

تتطلب كثير من حالات استخدام Redis قراءة مفاتيح متعددة وكتابتها ضمن عملية واحدة متسقة. ومن دون الذرّية، قد تؤدي حالات السباق إلى إفساد الحالة.

حالة سباق القراءة والتعديل والكتابة

من دون Lua: GET counter ← التعديل في العميل ← SET counter. قد يقرأ عميلان القيمة نفسها، ثم يعدّلها كل منهما، ويؤدي تنفيذ SET الثاني إلى الكتابة فوق تغييرات الأول.

إصلاح سكريبت Lua

باستخدام Lua في Redis، تحدث عملية القراءة والتعديل والكتابة ذريًا داخل الخادم.

EVAL "
local val = redis.call('GET', KEYS[1])
val = tonumber(val) or 0
val = val + tonumber(ARGV[1])
redis.call('SET', KEYS[1], val)
return val
" 1 counter 5

المقارنة والاستبدال

نفّذ CAS (المقارنة والاستبدال) ذريًا — ولا تحدّث القيمة إلا إذا كانت القيمة الحالية تساوي القيمة المتوقعة.

EVAL "
local cur = redis.call('GET', KEYS[1])
if cur == ARGV[1] then
  redis.call('SET', KEYS[1], ARGV[2])
  return 1
end
return 0
" 1 mykey expected newvalue

القفل الموزع

احصل على قفل ذريًا: SET key value NX EX seconds. هذا هو النمط الآمن، وهو المكافئ باستخدام Lua.

EVAL "
if redis.call('SET', KEYS[1], ARGV[1], 'NX', 'EX', ARGV[2]) then
  return 1
end
return 0
" 1 lock:resource "owner-uuid" 30

تحرير القفل بأمان

لا تحرّر القفل إلا إذا كنت مالكه. يمنع ذلك عميلًا آخر من تحرير قفل يخص عميلًا غيره.

EVAL "
if redis.call('GET', KEYS[1]) == ARGV[1] then
  return redis.call('DEL', KEYS[1])
end
return 0
" 1 lock:resource "owner-uuid"

المعاملات متعددة المفاتيح

يمكن لسكريبتات Lua إجراء عمليات ذرّية على مفاتيح متعددة، وهو أمر لا تضمنه MULTI/EXEC (إذ قد تفشل في منتصف التنفيذ وتترك حالة جزئية).

MULTI/EXEC مقابل Lua

تضع MULTI/EXEC الأوامر في قائمة انتظار لتنفيذها دفعة واحدة، لكنها ليست ذرّية تمامًا فيما يتعلق بالقيم المقروءة (وتضيف watch/unwatch تعقيدًا). أما سكريبتات Lua فهي أبسط وذرّية بالكامل.

التراجع في Lua

لا تدعم Lua في Redis المعاملات التي تتضمن التراجع. إذا حدث خطأ في منتصف التنفيذ، فلن تُعكَس أوامر redis.call التي نُفِّذت سابقًا. صمّم السكريبتات لتكون آمنة عبر التحقق من الشروط المسبقة أولًا.

حدود حجم السكريبت

ينبغي أن تكون السكريبتات صغيرة وسريعة. ضع المنطق المعقد في طبقة التطبيق، لا في Redis. استخدم Lua للجزء الذري فقط.

اختبار الذرّية

اختبر حالات السباق باستخدام عملاء Redis متزامنين. تحقّق من أن سكريبت Lua يحافظ على الحالة الصحيحة في ظل التزامن العالي باستخدام أدوات قياس أداء Redis.

سؤال حول العمليات الذرّية

لماذا تكون عملية القراءة والتعديل والكتابة داخل سكريبت Lua في Redis أكثر أمانًا من تنفيذها في كود التطبيق؟

مراجعة: العمليات الذرّية والمعاملات

استخدم سكريبتات Redis Lua لتنفيذ القراءة والتعديل والكتابة الذرية، وCAS، والقفل الموزع. تكون سكريبتات Lua أبسط وأكثر صحة من MULTI/EXEC للعمليات التي تعتمد على القيم المقروءة. اجعل السكريبتات مقتضبة واختبرها في ظل التزامن.

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

هل درس «العمليات الذرية والمعاملات» مجاني؟

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

ماذا ستتعلم في «العمليات الذرية والمعاملات»؟

استخدم نصوص Lua لتنفيذ عمليات Redis الذرية متعددة الخطوات تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «العمليات الذرية والمعاملات»؟

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

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

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

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

  1. بيئة EVAL وRedis Lua
  2. العمليات الذرية والمعاملات
  3. تحديد معدل الطلبات باستخدام Lua
  4. ‏SCRIPT LOAD وEVALSHA
← العودة إلى Lua Academy