ข้ามไปยังเนื้อหา

ภาพรวมของ Patterns

Redis ไม่ใช่แค่ cache — แต่เป็นเซิร์ฟเวอร์โครงสร้างข้อมูลที่หลากหลาย ซึ่งแก้ปัญหาบางประเภทที่ยากจะจัดการได้ดีด้วยฐานข้อมูลเชิงสัมพันธ์เพียงอย่างเดียว โมดูลนี้จะพาคุณสำรวจสี่ patterns ที่ผ่านการพิสูจน์มาแล้ว พร้อมอธิบายว่าทำไม Redis จึงเป็นเครื่องมือที่เหมาะสมสำหรับแต่ละ pattern

Redis เก็บข้อมูลทั้งหมดไว้ในหน่วยความจำ คำสั่งทั่วไปทำงานเสร็จภายในเวลาไม่ถึงหนึ่งมิลลิวินาที ซึ่งเร็วกว่าฐานข้อมูลที่อ่านจากดิสก์หลายเท่า เนื่องจาก Redis เป็น single-threaded ทุกคำสั่งจึงทำงานตามลำดับโดยไม่มี lock overhead คุณจะไม่มีทางเห็นสองคำสั่งอ่านและเขียนสลับกัน ทุก operation จึง atomic โดย default โดยไม่ต้องเขียนโค้ดเพิ่มเติม

Redis ยังรองรับ TTL (Time To Live): ทุก key สามารถกำหนดเวลาหมดอายุได้ เมื่อเวลาหมด Redis จะลบ key นั้นออกโดยอัตโนมัติ expiration ในตัวนี้เองที่ทำให้ caching และการจัดการ session เป็นเรื่องง่าย — คุณไม่จำเป็นต้องมี background job มาคอยลบข้อมูลเก่า

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

ทุกคำขอที่เข้ามาจะเพิ่มค่า counter key ที่ผูกกับผู้เรียกและกรอบเวลาปัจจุบัน หากค่า counter เกินขีดจำกัดที่อนุญาต คำขอนั้นจะถูกปฏิเสธ เนื่องจากการเพิ่มค่าใน Redis เป็น atomic จึงไม่มี race condition แม้ในสภาวะที่มีการเรียกพร้อมกันอย่างหนัก

เซสชันของผู้ใช้ถูกเก็บเป็น Redis hashes — หนึ่ง key ต่อหนึ่ง session โดยมีฟิลด์แยกสำหรับแต่ละข้อมูลใน session การกำหนด TTL บน session key หมายความว่า session ที่ไม่ได้ใช้งานจะหมดอายุโดยอัตโนมัติ การอ่านและเขียนเป็น O(1) และเร็วกว่าการค้นหาแถวในฐานข้อมูลมาก

คำสั่ง SET key value NX PX milliseconds จะตั้งค่า key เฉพาะเมื่อยังไม่มี key นั้นอยู่ และกำหนดเวลาหมดอายุให้ นี่คือรากฐานของ distributed lock: มีเพียงผู้เรียกรายเดียวที่ชนะการแข่งขัน และ lock จะถูกปล่อยแน่นอนแม้ว่าผู้ถือ lock จะ crash

อะไรทำให้คำสั่ง Redis เป็น atomic โดยค่าเริ่มต้น?
ฟีเจอร์ใดของ Redis ที่ทำให้ key หายไปโดยอัตโนมัติหลังจากหมดเวลา?
Pattern ใดที่ใช้ `SET key val NX PX` เพื่อป้องกันการทำงานพร้อมกัน?