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
endSCRIPT 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- EVAL และสภาพแวดล้อม Lua ของ Redis
- การดำเนินการแบบอะตอมิกและธุรกรรม
- การจำกัดอัตราด้วย Lua
- SCRIPT LOAD และ EVALSHA