Redis
คืออะไร
ลองนึกภาพการเก็บโน้ตที่คุณต้องใช้ตอนนี้ไว้บนโต๊ะทำงานตรงหน้า แทนที่จะเดินไปหยิบจากตู้เก็บเอกสารทุกครั้ง — เร็วกว่ามาก แต่ถ้าไฟดับ ของบนโต๊ะก็หายไปหมด Redis ทำงานเหมือนโต๊ะนั้น คือมันเก็บข้อมูลไว้ในหน่วยความจำที่เข้าถึงได้เร็ว (RAM หรือ Random Access Memory) แทนที่จะเก็บบนดิสก์ ทำให้การอ่านและเขียนข้อมูลเร็วมาก นอกจากนี้ยังสามารถบันทึกลงดิสก์ได้ด้วยถ้าต้องการ มันทำงานเป็น key-value store (ที่เก็บข้อมูลแบบคู่กุญแจ-ค่า) แต่รองรับโครงสร้างข้อมูลที่หลากหลาย เช่น list, set, sorted set, hash และ stream มักถูกใช้เป็น (ที่พักข้อมูลชั่วคราวเพื่อความเร็ว), store (ที่เก็บข้อมูลการล็อกอิน), (คิวงาน) หรือ rate limiter (ตัวจำกัดอัตราการเรียกใช้) ควบคู่ไปกับฐานข้อมูลหลัก
จุดแข็ง
- ความหน่วง (latency) ต่ำกว่ามิลลิวินาที เพราะทำงานในหน่วยความจำ
- โครงสร้างข้อมูลหลากหลาย: strings, hashes, lists, sets, sorted sets, streams
- มี TTL (Time To Live)/วันหมดอายุในตัว — แต่ละรายการสามารถลบตัวเองอัตโนมัติหลังเวลาที่กำหนด — เหมาะมากสำหรับการทำ caching และ session
- การทำงานแบบ atomic (ทำครบหรือไม่ทำเลย) และ Lua scripting สำหรับตัวนับและการล็อกที่ปลอดภัย
- รองรับ pub/sub และ streams สำหรับระบบส่งข้อความและ event pipeline
ข้อแลกเปลี่ยน
- ข้อมูลถูกจำกัดด้วยหน่วยความจำที่มี ชุดข้อมูลขนาดใหญ่จะมีค่าใช้จ่ายสูง
- การบันทึกลงดิสก์เป็นทางเลือก และอาจสูญเสียข้อมูลที่เพิ่งเขียนไปหากระบบล่ม
- ไม่ใช่ตัวทดแทนฐานข้อมูลเชิงสัมพันธ์ (relational store) ที่คงทน
- การทำ clustering เพิ่มความซับซ้อนในการดูแลระบบสำหรับ sharding และ failover
ควรใช้เมื่อไร
ใช้ Redis เพื่อแคชผลลัพธ์ของคำสั่งค้นหาที่มีต้นทุนสูง เก็บ session จัดการ rate limiting บริหารคิวงาน สร้างกระดานผู้นำ (leaderboard) หรือส่งข้อความแบบเรียลไทม์ ควรใช้คู่กับฐานข้อมูลที่คงทนซึ่งเป็นแหล่งข้อมูลจริง (source of truth)
เข้ากับ vibe coding อย่างไร
เวลาสั่งงาน AI ต้องบอกให้ชัดว่า Redis เป็น cache หรือที่เก็บข้อมูลเสริม ไม่ใช่ระบบบันทึกหลัก ดังนั้นควรตั้ง TTL ให้กับข้อมูลที่แคชไว้เสมอ นอกจากนี้ควรออกแบบรูปแบบการตั้งชื่อ key ให้ชัดเจน (ตัวอย่างเช่น user:123:profile) ให้ AI ใช้คำสั่งแบบ atomic เช่น INCR สำหรับตัวนับ และ SET ... NX EX สำหรับการล็อก แทนที่จะใช้ลำดับ read-modify-write (อ่าน-แก้ไข-เขียน) ที่อาจเกิดการแข่งกันเข้าถึงข้อมูล (race condition) เคล็ดลับที่ดี: ให้ AI ใช้รูปแบบ cache-aside ซึ่งหมายความง่าย ๆ ว่า ให้ดูใน cache ก่อน ถ้าไม่มีค่อยไปดึงจากฐานข้อมูล แล้วบันทึกลง cache ไว้ใช้ครั้งต่อไป และควรให้ AI อธิบายกลยุทธ์การล้างข้อมูลเก่า (invalidation) ด้วย — คือวิธีที่ข้อมูลเก่าที่ไม่ทันสมัยแล้วจะถูกลบออก — เพื่อไม่ให้ข้อมูลที่ล้าสมัยค้างอยู่
# Cache a value with a 1-hour expiry
SET user:123:profile "{\"name\":\"Ada\"}" EX 3600
# Atomic rate-limit counter
INCR rate:ip:203.0.113.5
EXPIRE rate:ip:203.0.113.5 60
# Distributed lock: set only if not exists, auto-expire
SET lock:job:42 "owner-a" NX EX 30
# Leaderboard with a sorted set
ZADD leaderboard 4200 "player:7"
ZREVRANGE leaderboard 0 9 WITHSCORES