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

EVAL และสภาพแวดล้อม Lua ของ Redis

เรียกใช้สคริปต์ Lua ด้วย EVAL ทำความเข้าใจ KEYS/ARGV และการแคชสคริปต์

EVAL และสภาพแวดล้อม Lua ของ Redis เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้ Lua ใน Redis

Redis อนุญาตให้เรียกใช้สคริปต์ Lua ภายในเซิร์ฟเวอร์ด้วย EVAL สคริปต์จะทำงานแบบอะตอมิก กล่าวคือไม่มีคำสั่ง Redis อื่นทำงานพร้อมกัน จึงทำให้การดำเนินการหลายขั้นตอนมีความปลอดภัย

คำสั่ง EVAL

EVAL script numkeys key [key ...] arg [arg ...] — สคริปต์เข้าถึงคีย์ผ่านตาราง KEYS และอาร์กิวเมนต์ผ่านตาราง ARGV (เริ่มดัชนีที่ 1)

-- Redis CLI:
EVAL "return KEYS[1]" 1 mykey
-- Returns: mykey

การเข้าถึง KEYS และ ARGV

ใน Lua KEYS และ ARGV เป็นตารางโกลบอลที่ EVAL เติมค่าให้

EVAL "
local key = KEYS[1]
local val = ARGV[1]
redis.call('SET', key, val)
return redis.call('GET', key)
" 1 greeting hello

redis.call เทียบกับ redis.pcall

redis.call(cmd, ...) เรียกใช้คำสั่ง Redis และทำให้เกิดข้อผิดพลาดของ Lua หากล้มเหลว ส่วน redis.pcall จะส่งคืนตารางข้อผิดพลาดแทนการทำให้เกิดข้อผิดพลาด

local ok, err = pcall(function()
  redis.call("INVALID_CMD")
end)
if not ok then print("Error caught:", err) end

ค่าที่ส่งคืน

ชนิดข้อมูลของ Lua จะถูกแปลงเป็นชนิดการตอบกลับของ Redis ดังนี้: ตัวเลข → จำนวนเต็ม, สตริง → สตริงแบบหลายไบต์, ตาราง → อาร์เรย์แบบหลายรายการ, false/nil → การตอบกลับแบบ nil, true → จำนวนเต็ม 1

การแคชสคริปต์

Redis แคชสคริปต์ที่คอมไพล์แล้วตาม SHA1 การเรียก EVAL ครั้งแรกจะคอมไพล์และแคชสคริปต์ การเรียกครั้งถัดไปด้วย SHA เดียวกัน (ผ่าน EVALSHA) จะข้ามขั้นตอนการคอมไพล์

การเข้าถึงชนิดข้อมูล Redis

คำสั่ง Redis มาตรฐานทั้งหมดพร้อมใช้งานผ่าน redis.call: GET, SET, HGET, LPUSH, EXPIRE และอื่น ๆ

local count = redis.call("INCR", KEYS[1])
redis.call("EXPIRE", KEYS[1], 3600)
return count

การรับประกันความเป็นอะตอมิก

ขณะที่สคริปต์ Lua กำลังทำงาน Redis จะบล็อกไคลเอ็นต์อื่นทั้งหมด สคริปต์ควรทำงานให้รวดเร็ว (ระดับไมโครวินาทีถึงมิลลิวินาที) เพราะสคริปต์ที่ทำงานนานจะบล็อกทั้งเซิร์ฟเวอร์

เวอร์ชัน Lua ใน Redis

Redis ฝัง Lua 5.1 (หรือเวอร์ชันที่เข้ากันได้กับ 5.1) ฟีเจอร์บางอย่าง เช่น goto และ bit32 อาจแตกต่างกัน ใช้ไลบรารี cjson และ cmsgpack ที่ Redis จัดเตรียมไว้สำหรับ JSON/MessagePack

แนวทางปฏิบัติที่ดีในการจัดการข้อผิดพลาด

ใช้ redis.pcall สำหรับการดำเนินการที่อาจล้มเหลว (เช่น ข้อผิดพลาดเกี่ยวกับชนิดข้อมูล) ส่งคืนตารางข้อผิดพลาดที่มีโครงสร้างเพื่อให้ไคลเอ็นต์นำไปตีความ

การแก้ไขข้อบกพร่องของสคริปต์ Redis

ใช้ redis.log(redis.LOG_DEBUG, "message") เพื่อเขียนข้อความแก้ไขข้อบกพร่องลงในบันทึกของ Redis ทดสอบสคริปต์ใน redis-cli ด้วย EVAL ก่อนใช้ SCRIPT LOAD

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

ประโยชน์หลักของการเรียกใช้สคริปต์ Lua ใน Redis ด้วย EVAL คืออะไร

บทสรุป: EVAL และสภาพแวดล้อม Redis Lua

EVAL เรียกใช้สคริปต์ Lua ใน Redis แบบอะตอมิก เข้าถึงคีย์ผ่าน KEYS[n] และอาร์กิวเมนต์ผ่าน ARGV[n] ใช้ redis.call สำหรับคำสั่งต่าง ๆ สคริปต์จะถูกแคชตาม SHA1 ควรรักษาความรวดเร็วของสคริปต์เพื่อหลีกเลี่ยงการบล็อกเซิร์ฟเวอร์

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

บทเรียน “EVAL และสภาพแวดล้อม Lua ของ Redis” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “EVAL และสภาพแวดล้อม Lua ของ Redis”

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

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

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

บทเรียน “EVAL และสภาพแวดล้อม Lua ของ Redis” ใช้เวลานานแค่ไหน

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

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

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

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

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