ภาพรวมของ Patterns
Redis ไม่ใช่แค่ cache — แต่เป็นเซิร์ฟเวอร์โครงสร้างข้อมูลที่หลากหลาย ซึ่งแก้ปัญหาบางประเภทที่ยากจะจัดการได้ดีด้วยฐานข้อมูลเชิงสัมพันธ์เพียงอย่างเดียว โมดูลนี้จะพาคุณสำรวจสี่ patterns ที่ผ่านการพิสูจน์มาแล้ว พร้อมอธิบายว่าทำไม Redis จึงเป็นเครื่องมือที่เหมาะสมสำหรับแต่ละ pattern
ทำไม Redis จึงเร็ว
หัวข้อที่มีชื่อว่า “ทำไม Redis จึงเร็ว”Redis เก็บข้อมูลทั้งหมดไว้ในหน่วยความจำ คำสั่งทั่วไปทำงานเสร็จภายในเวลาไม่ถึงหนึ่งมิลลิวินาที ซึ่งเร็วกว่าฐานข้อมูลที่อ่านจากดิสก์หลายเท่า เนื่องจาก Redis เป็น single-threaded ทุกคำสั่งจึงทำงานตามลำดับโดยไม่มี lock overhead คุณจะไม่มีทางเห็นสองคำสั่งอ่านและเขียนสลับกัน ทุก operation จึง atomic โดย default โดยไม่ต้องเขียนโค้ดเพิ่มเติม
Redis ยังรองรับ TTL (Time To Live): ทุก key สามารถกำหนดเวลาหมดอายุได้ เมื่อเวลาหมด Redis จะลบ key นั้นออกโดยอัตโนมัติ expiration ในตัวนี้เองที่ทำให้ caching และการจัดการ session เป็นเรื่องง่าย — คุณไม่จำเป็นต้องมี background job มาคอยลบข้อมูลเก่า
Patterns ในโมดูลนี้
หัวข้อที่มีชื่อว่า “Patterns ในโมดูลนี้”1. Caching (cache-aside)
หัวข้อที่มีชื่อว่า “1. Caching (cache-aside)”แอปพลิเคชันของคุณตรวจสอบ Redis ก่อนที่จะไปยังฐานข้อมูล หากไม่พบข้อมูล จะอ่านจาก DB แล้วเก็บผลลัพธ์ไว้ใน Redis พร้อม TTL จากนั้นส่งคืนข้อมูลนั้น การอ่านครั้งต่อไปจะได้รับข้อมูลโดยตรงจากหน่วยความจำ pattern นี้สามารถลดภาระของฐานข้อมูลได้อย่างมากสำหรับ workloads ที่เน้นการอ่าน
2. Rate Limiting (fixed-window counter)
หัวข้อที่มีชื่อว่า “2. Rate Limiting (fixed-window counter)”ทุกคำขอที่เข้ามาจะเพิ่มค่า counter key ที่ผูกกับผู้เรียกและกรอบเวลาปัจจุบัน หากค่า counter เกินขีดจำกัดที่อนุญาต คำขอนั้นจะถูกปฏิเสธ เนื่องจากการเพิ่มค่าใน Redis เป็น atomic จึงไม่มี race condition แม้ในสภาวะที่มีการเรียกพร้อมกันอย่างหนัก
3. Session Store (hash per session + TTL)
หัวข้อที่มีชื่อว่า “3. Session Store (hash per session + TTL)”เซสชันของผู้ใช้ถูกเก็บเป็น Redis hashes — หนึ่ง key ต่อหนึ่ง session โดยมีฟิลด์แยกสำหรับแต่ละข้อมูลใน session การกำหนด TTL บน session key หมายความว่า session ที่ไม่ได้ใช้งานจะหมดอายุโดยอัตโนมัติ การอ่านและเขียนเป็น O(1) และเร็วกว่าการค้นหาแถวในฐานข้อมูลมาก
4. Distributed Lock (SET NX PX + Lua release)
หัวข้อที่มีชื่อว่า “4. Distributed Lock (SET NX PX + Lua release)”คำสั่ง SET key value NX PX milliseconds จะตั้งค่า key เฉพาะเมื่อยังไม่มี key นั้นอยู่ และกำหนดเวลาหมดอายุให้ นี่คือรากฐานของ distributed lock: มีเพียงผู้เรียกรายเดียวที่ชนะการแข่งขัน และ lock จะถูกปล่อยแน่นอนแม้ว่าผู้ถือ lock จะ crash