คำสั่งแรกของคุณ
Redis ทำงานบนโมเดล key-value ที่เรียบง่าย — คุณเก็บข้อมูลโดยการผูก value เข้ากับ key จากนั้นดึงข้อมูลกลับมาด้วย key เดิมนั้น ไม่มี schema ไม่มีตาราง เพียงแค่ key และ value เท่านั้น
SET, GET และ Friends
หัวข้อที่มีชื่อว่า “SET, GET และ Friends”คำสั่งพื้นฐานที่สุดใน Redis คือ SET และ GET ลองดูตัวอย่างด้านล่างเพื่อทำความเข้าใจว่าคำสั่งเหล่านี้ทำงานร่วมกับ EXISTS, TYPE, KEYS และ DEL อย่างไร
127.0.0.1:6379> SET name "Redis"OK127.0.0.1:6379> GET name"Redis"127.0.0.1:6379> SET score 100OK127.0.0.1:6379> EXISTS name(integer) 1127.0.0.1:6379> EXISTS missing(integer) 0127.0.0.1:6379> TYPE namestring127.0.0.1:6379> KEYS *1) "score"2) "name"127.0.0.1:6379> DEL name(integer) 1127.0.0.1:6379> GET name(nil)SET name "Redis"
GET name
SET score 100
EXISTS name
EXISTS missing
TYPE name
KEYS *
DEL name
GET nameข้อแลกเปลี่ยน
หัวข้อที่มีชื่อว่า “ข้อแลกเปลี่ยน”| ตัวเลือก | Benefit | Cost |
|---|---|---|
| โมเดล key-value แบบไม่มี schema | เริ่มต้นง่าย เก็บอะไรก็ได้ทันทีโดยไม่ต้อง define ตารางล่วงหน้า | ไม่มีการบังคับ schema หรือ type validation ฝั่ง server ผิดพลาดจาก key/value ที่ไม่ตรง type จะรู้ตอน runtime |
ใช้ KEYS * เพื่อดูข้อมูลทั้งหมด | สะดวกเวลาทดลองบน dataset เล็ก ๆ ใน dev | บล็อก event loop จนกว่าจะสแกนครบทุก key ห้ามใช้กับ dataset ใหญ่ใน production |
| เก็บ key แบบไม่ตั้ง TTL | ข้อมูลไม่หายไปเอง เหมาะกับข้อมูลที่ต้องอยู่ถาวร | ถ้าลืมตั้ง expiry สำหรับข้อมูลที่ควรเป็น cache หน่วยความจำจะโตเรื่อย ๆ โดยไม่มีการล้าง |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”- ใช้
KEYS *ใน production เพื่อดู key ทั้งหมด — คำสั่งนี้บล็อก server จนกว่าจะสแกนเสร็จ บน dataset ใหญ่อาจทำให้ client อื่นค้าง ควรใช้SCANแทนเมื่อทำงานกับข้อมูลจริง - ไม่ตั้ง TTL ให้ key ที่ควรเป็นข้อมูลชั่วคราว — ถ้าใช้
SETเก็บ cache โดยไม่ผูก expiry ไว้เลย หน่วยความจำจะสะสมไปเรื่อย ๆ จนถึงขีดจำกัดของmaxmemory - ทดสอบคำสั่งผ่าน
redis-cliแล้วคิดว่าพฤติกรรมจะเหมือนกันทุกอย่างในโค้ดแอปจริง — client library อาจมี serialization, encoding, หรือ error handling ต่างจากที่เห็นใน CLI ควรทดสอบผ่าน library จริงก่อนขึ้น production ด้วย
💡 ตัวอย่างจากของจริง
Twitter — ใช้โครงสร้าง key-value แบบเดียวกับที่เรียนในบทนี้เป็นพื้นฐานของ timeline cache โดยผูก key อย่าง
user:<id>:timelineเข้ากับข้อมูล tweet ล่าสุดStack Overflow — ใช้
SET/GETง่าย ๆ แบบนี้เป็นส่วนหนึ่งของ cache layer หน้า SQL Server เพื่อลด query ซ้ำสำหรับหน้าเว็บที่มีคนอ่านพร้อมกันเยอะ