0Pricing
Lua Academy · درس

‏SCRIPT LOAD وEVALSHA

حمّل النصوص باستخدام SCRIPT LOAD ونفّذها عبر SHA1 لتحقيق الكفاءة

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

مشكلة EVAL

يرسل EVAL نص السكريبت كاملًا في كل استدعاء. ويؤدي ذلك إلى هدر عرض النطاق الترددي للسكريبتات التي تُنفَّذ بكثرة. يحل SCRIPT LOAD + EVALSHA هذه المشكلة بتحميل السكريبت مرة واحدة واستدعائه باستخدام تجزئة SHA1.

SCRIPT LOAD

يترجم SCRIPT LOAD script السكريبت ويخزّنه مؤقتًا في Redis، ثم يعيد تجزئة SHA1 الخاصة به. يظل السكريبت مخزّنًا مؤقتًا حتى يُعاد تشغيل الخادم أو يُستدعَى SCRIPT FLUSH.

# Redis CLI:
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Returns: "abc123...sha1hash..."

EVALSHA

ينفّذ EVALSHA sha1 numkeys [keys] [args] السكريبت المحمّل سابقًا والمحدّد بواسطة SHA1 الخاص به. ويفشل مع NOSCRIPT إذا لم يكن السكريبت مخزّنًا مؤقتًا.

# Redis CLI:
EVALSHA abc123...sha1hash... 1 mykey
# Returns the same result as EVAL

نمط التطبيق

عند بدء تشغيل التطبيق: استخدم SCRIPT LOAD لتحميل جميع السكريبتات، ثم خزّن قيم SHA1 الخاصة بها. بعد ذلك استخدم EVALSHA في جميع الاستدعاءات أثناء التشغيل.

local redis = require("redis")
local scriptText = [[
  local v = redis.call("GET", KEYS[1])
  return v
]]
local sha = redis:script_load(scriptText)
-- Later:
redis:evalsha(sha, 1, "mykey")

معالجة خطأ NOSCRIPT

عند إعادة تشغيل Redis، تُفقد السكريبتات المخزّنة مؤقتًا. التقط أخطاء NOSCRIPT وانتقل احتياطيًا إلى EVAL لإعادة التحميل.

local function safeEvalsha(r, sha, script, numkeys, ...)
  local ok, result = pcall(r.evalsha, r, sha, numkeys, ...)
  if not ok and result:find("NOSCRIPT") then
    sha = r:script_load(script)
    result = r:evalsha(sha, numkeys, ...)
  end
  return result
end

SCRIPT EXISTS

يتحقق SCRIPT EXISTS sha1 [sha1 ...] مما إذا كانت السكريبتات مخزّنة مؤقتًا. ويعيد 1 لكل سكريبت مخزّن مؤقتًا، و0 للسكريبتات المفقودة. استخدمه لإعادة التهيئة المسبقة بعد إعادة التشغيل.

SCRIPT FLUSH

يزيل SCRIPT FLUSH جميع السكريبتات المخزّنة مؤقتًا من ذاكرة Redis. استخدمه أثناء عمليات النشر عند تغيير السكريبتات.

إصدارات السكريبتات

عند تغيير السكريبت، تتغير قيمة SHA1 الخاصة به. خزّن قيم SHA1 مع أرقام الإصدارات، وحدّثها بعد النشر.

توفير عرض النطاق الترددي

بالنسبة إلى سكريبت حجمه 500 بايت يُستدعَى 10,000 مرة في الثانية، يوفر EVALSHA مقدار 5 ميغابايت/ثانية من حركة Redis مقارنةً بـ EVAL. ويصبح ذلك مهمًا عند التوسع.

Redis Cluster مع EVALSHA

في وضع العنقود، يعمل EVALSHA بالطريقة نفسها التي يعمل بها EVAL فيما يتعلق بقيود الفتحات: يجب أن تكون جميع KEYS في الفتحة نفسها.

أفضل ممارسة

استخدم EVALSHA دائمًا في بيئة الإنتاج بعد تحميل السكريبتات عند بدء التشغيل. طبّق آلية الرجوع إلى EVAL عند NOSCRIPT لضمان المرونة بعد إعادة تشغيل Redis.

سؤال حول EVALSHA

ماذا يستخدم EVALSHA بدلًا من نص السكريبت؟

مراجعة: SCRIPT LOAD وEVALSHA

حمّل السكريبتات مرة واحدة باستخدام SCRIPT LOAD للحصول على قيمة SHA1. استخدم EVALSHA في جميع الاستدعاءات اللاحقة لتوفير عرض النطاق الترددي. عالج أخطاء NOSCRIPT بإعادة التحميل. يتحقق SCRIPT EXISTS من حالة التخزين المؤقت، بينما يمسح SCRIPT FLUSH هذا التخزين.

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

هل درس «‏SCRIPT LOAD وEVALSHA» مجاني؟

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

ماذا ستتعلم في «‏SCRIPT LOAD وEVALSHA»؟

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

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

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

كم من الوقت يستغرق درس «‏SCRIPT LOAD وEVALSHA»؟

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

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

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

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

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