0Pricing
Lua Academy · บทเรียน

SCRIPT LOAD และ EVALSHA

โหลดสคริปต์ด้วย SCRIPT LOAD และเรียกใช้ด้วย SHA1 เพื่อประสิทธิภาพ

SCRIPT LOAD และ EVALSHA เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 ช่วยประหยัดการรับส่งข้อมูล Redis ได้ 5 MB/s เมื่อเทียบกับ EVAL ซึ่งมีนัยสำคัญเมื่อระบบมีขนาดใหญ่

Redis Cluster ร่วมกับ EVALSHA

ในโหมดคลัสเตอร์ EVALSHA ทำงานเหมือน EVAL ในเรื่องข้อจำกัดของสล็อต: KEYS ทั้งหมดต้องอยู่ในสล็อตเดียวกัน

แนวทางปฏิบัติที่ดี

ใช้ EVALSHA ในระบบจริงเสมอหลังจากโหลดสคริปต์เมื่อเริ่มต้นระบบ ใช้กลไกสำรอง NOSCRIPT เพื่อให้ระบบยังทำงานได้หลัง Redis เริ่มต้นใหม่

คำถามเกี่ยวกับ EVALSHA

EVALSHA ใช้อะไรแทนข้อความสคริปต์

บทสรุป: SCRIPT LOAD และ EVALSHA

โหลดสคริปต์ครั้งเดียวด้วย SCRIPT LOAD เพื่อรับค่า SHA1 ใช้ EVALSHA สำหรับการเรียกใช้ครั้งต่อ ๆ ไปทั้งหมดเพื่อประหยัดแบนด์วิดท์ จัดการข้อผิดพลาด NOSCRIPT ด้วยการโหลดใหม่ SCRIPT EXISTS ใช้ตรวจสอบสถานะแคช ส่วน SCRIPT FLUSH ใช้ล้างแคช

คำถามที่พบบ่อย

บทเรียน “SCRIPT LOAD และ EVALSHA” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “SCRIPT LOAD และ EVALSHA” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “SCRIPT LOAD และ EVALSHA”

โหลดสคริปต์ด้วย SCRIPT LOAD และเรียกใช้ด้วย SHA1 เพื่อประสิทธิภาพ คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “SCRIPT LOAD และ EVALSHA” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. EVAL และสภาพแวดล้อม Lua ของ Redis
  2. การดำเนินการแบบอะตอมิกและธุรกรรม
  3. การจำกัดอัตราด้วย Lua
  4. SCRIPT LOAD และ EVALSHA
← กลับไปที่ Lua Academy