Persistence & Expiration: ภาพรวม
Persistence ใน Redis คืออะไร?
หัวข้อที่มีชื่อว่า “Persistence ใน Redis คืออะไร?”Redis เก็บข้อมูลทั้งหมดไว้ใน RAM ทำให้ทำงานได้รวดเร็วมาก แต่ RAM นั้นไม่ถาวร — ปิดเครื่องเมื่อไหร่ข้อมูลก็หายไป เพื่อให้ข้อมูลอยู่รอดหลังจาก restart Redis จึงมีกลไก persistence สองแบบที่ทำงานเสริมกัน โดยเขียนข้อมูลลงดิสก์
คุณสามารถเลือกใช้แบบใดแบบหนึ่ง ทั้งสอง หรือไม่ใช้เลย ขึ้นอยู่กับกรณีการใช้งาน cache ล้วน ๆ อาจไม่ต้องการ persistence เลย แต่ session store หรือ primary database ควรใช้ทั้งสองแบบ
แนวคิดหลักสี่ประการในโมดูลนี้
หัวข้อที่มีชื่อว่า “แนวคิดหลักสี่ประการในโมดูลนี้”RDB — Periodic Snapshots
หัวข้อที่มีชื่อว่า “RDB — Periodic Snapshots”RDB (Redis Database) ถ่าย snapshot ของชุดข้อมูลทั้งหมด ณ เวลาหนึ่ง แล้วบันทึกลงไฟล์ binary ชื่อ dump.rdb Snapshot จะถูกเรียกโดยอัตโนมัติตาม threshold ที่กำหนดได้ (เช่น “มีการเปลี่ยนแปลงอย่างน้อย 100 key ในช่วง 5 นาทีที่ผ่านมา”) หรือสั่งด้วยตนเองด้วย BGSAVE RDB มีขนาดกะทัดรัดและโหลดได้เร็วตอน restart แต่อาจสูญเสียข้อมูลที่เขียนหลัง snapshot ล่าสุดได้
AOF — Append-Only File
หัวข้อที่มีชื่อว่า “AOF — Append-Only File”AOF (Append-Only File) บันทึกคำสั่งเขียนทุกคำสั่งที่เซิร์ฟเวอร์รับเข้ามาลงในไฟล์ชื่อ appendonly.aof เมื่อ restart Redis จะเล่นซ้ำ log เพื่อสร้างชุดข้อมูลขึ้นใหม่ AOF ให้ความทนทานที่ละเอียดกว่ามาก — ด้วย appendfsync everysec คุณจะสูญเสียข้อมูลได้มากที่สุดเพียงหนึ่งวินาที ข้อเสียคือไฟล์มีขนาดใหญ่กว่าและ restart ช้ากว่าเล็กน้อย
Key Expiration / TTL
หัวข้อที่มีชื่อว่า “Key Expiration / TTL”Redis ช่วยให้คุณแนบเวลา time-to-live กับ key ใด ๆ ด้วย EXPIRE (วินาที) หรือ PEXPIRE (มิลลิวินาที) เมื่อ TTL หมดอายุ key จะถูกลบโดยอัตโนมัติ ใช้ TTL เพื่อตรวจสอบเวลาที่เหลือ และ PERSIST เพื่อลบ expiration ออกและทำให้ key อยู่ถาวร
Eviction Policies
หัวข้อที่มีชื่อว่า “Eviction Policies”เมื่อ Redis หมดหน่วยความจำก็ต้องตัดสินใจว่าจะทำอย่างไร Eviction policies ควบคุมสิ่งนี้: noeviction คืนค่า error, allkeys-lru ลบ key ที่ใช้น้อยที่สุดในทุก key, volatile-lru ลบ key LRU เฉพาะในกลุ่ม key ที่มี TTL ตั้งไว้ เป็นต้น Policy ที่เหมาะสมขึ้นอยู่กับว่า Redis ทำหน้าที่เป็น cache หรือ primary store
บทเรียนในโมดูลนี้
หัวข้อที่มีชื่อว่า “บทเรียนในโมดูลนี้”| # | บทเรียน | หัวข้อที่ครอบคลุม |
|---|---|---|
| 1 | Persistence & Expiration: Overview (หน้านี้) | RDB, AOF, TTL, eviction — ภาพรวม |
| 2 | RDB Snapshots and AOF | BGSAVE, BGREWRITEAOF, config directives, hybrid mode |
| 3 | Key Expiration and TTL | EXPIRE, PEXPIRE, TTL, PERSIST, lazy vs active expiry |
| 4 | Eviction Policies | maxmemory, LRU/LFU policies, noeviction, cache tuning |
| 5 | Persistence in Practice | การเลือก strategy ที่เหมาะสม, การมอนิเตอร์, backup scripts |
ลองทำ — TTL เบื้องต้น
หัวข้อที่มีชื่อว่า “ลองทำ — TTL เบื้องต้น”โค้ดด้านล่างตั้ง key พร้อม TTL 30 วินาที ตรวจสอบ TTL ที่เหลือ แล้วลบ expiration ออกเพื่อทำให้ key อยู่ถาวร
127.0.0.1:6379> SET session:demo "hello" EX 30OK127.0.0.1:6379> TTL session:demo(integer) 30127.0.0.1:6379> PERSIST session:demo(integer) 1127.0.0.1:6379> TTL session:demo(integer) -1TTL คืนค่า -1 เมื่อ key มีอยู่แต่ไม่มี expiration และ -2 เมื่อ key ไม่มีอยู่เลย
SET session:demo "hello" EX 30
TTL session:demo
PERSIST session:demo
TTL session:demo