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

การดำเนินการแบบอะตอมิกและธุรกรรม

ใช้สคริปต์ Lua เพื่อดำเนินการ Redis หลายขั้นตอนแบบอะตอมิก

การดำเนินการแบบอะตอมิกและธุรกรรม เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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

Redis Lua ไม่รองรับธุรกรรมที่ย้อนกลับได้ หากเกิดข้อผิดพลาดระหว่างทาง คำสั่ง redis.call ที่ดำเนินการไปแล้วจะไม่ถูกย้อนกลับ ออกแบบสคริปต์ให้ปลอดภัยด้วยการตรวจสอบเงื่อนไขเบื้องต้นก่อน

ข้อจำกัดด้านขนาดสคริปต์

สคริปต์ควรมีขนาดเล็กและทำงานรวดเร็ว ตรรกะที่ซับซ้อนควรอยู่ในชั้นแอปพลิเคชัน ไม่ใช่ใน Redis ใช้ Lua เฉพาะส่วนที่ต้องการความเป็นอะตอมิก

การทดสอบความเป็นอะตอมิก

ทดสอบสภาวะแข่งขันด้วยไคลเอ็นต์ Redis ที่ทำงานพร้อมกันหลายตัว ตรวจสอบว่าสคริปต์ Lua รักษาสถานะที่ถูกต้องภายใต้การทำงานพร้อมกันในระดับสูง โดยใช้เครื่องมือทดสอบประสิทธิภาพของ Redis

คำถามเกี่ยวกับการดำเนินการแบบอะตอมิก

เหตุใดการอ่าน-แก้ไข-เขียนในสคริปต์ Redis Lua จึงปลอดภัยกว่าการทำเช่นเดียวกันในโค้ดแอปพลิเคชัน

บทสรุป: การดำเนินการแบบอะตอมิกและธุรกรรม

ใช้สคริปต์ Redis Lua สำหรับการอ่าน-แก้ไข-เขียนแบบอะตอมิก, CAS และการล็อกแบบกระจาย สคริปต์ Lua เรียบง่ายและถูกต้องกว่า MULTI/EXEC สำหรับการดำเนินการที่ขึ้นอยู่กับค่าที่อ่าน ควรรักษาสคริปต์ให้กระชับและทดสอบภายใต้การทำงานพร้อมกัน

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

บทเรียน “การดำเนินการแบบอะตอมิกและธุรกรรม” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การดำเนินการแบบอะตอมิกและธุรกรรม”

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

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

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

บทเรียน “การดำเนินการแบบอะตอมิกและธุรกรรม” ใช้เวลานานแค่ไหน

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

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

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

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

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