2025/10/19-redis-บันทึกแนวทางการใช้งาน-set-และ-sorted-set preview

Redis บันทึกการใช้งาน Set และ Sorted Set (ZSET)

ทำไมต้อง Set และ Sorted Set?

เมื่อคุณต้องการเก็บข้อมูลที่ไม่ซ้ำกัน (Unique) หรือต้องการเก็บข้อมูลที่เรียงลำดับตามคะแนน (Score) List หรือ Hash ของ Redis อาจจะไม่ตอบโจทย์ บทความนี้จะเจาะลึกโครงสร้างข้อมูล Set และ Sorted Set (ZSET) ซึ่งเป็นเครื่องมือทรงพลังสำหรับการจัดการความสัมพันธ์ของข้อมูล

Redis Set (SADD, SMEMBERS, SISMEMBER)

Redis Set คือคอลเลกชันของสตริงที่ไม่ซ้ำกัน โดยไม่มีลำดับ (Unordered Collection of Unique Strings) คล้ายกับ Set ทางคณิตศาสตร์

คุณสมบัติหลัก:

  1. ความไม่ซ้ำกัน (Uniqueness): ข้อมูลที่ถูกเพิ่มซ้ำจะไม่ถูกเก็บซ้ำใน Set
  2. การดำเนินการทางคณิตศาสตร์: สามารถทำ Union (รวม), Intersection (หาจุดร่วม), และ Difference (หาความแตกต่าง) ระหว่าง Set ได้อย่างรวดเร็ว (Time Complexity O(N) เมื่อ N คือจำนวนสมาชิกที่เล็กที่สุด)

ตัวอย่างการใช้งาน Set

การจัดการสิทธิ์ผู้ใช้ (User Permissions)

คำสั่งคำอธิบาย
SADD admins user:anuwong user:janeเพิ่มผู้ใช้ anuwong และ jane เข้าในกลุ่ม admins
SADD editors user:jane user:peterเพิ่ม jane และ peter เข้าในกลุ่ม editors
SISMEMBER admins user:anuwongตรวจสอบว่า anuwong เป็น Admin หรือไม่ (ผลลัพธ์: 1/True)
SINTER admins editorsหาผู้ใช้ที่เป็นทั้ง Admin และ Editor (ผลลัพธ์: user:jane)

Redis Sorted Set (ZADD, ZRANGE, ZRANK)

Redis Sorted Set (ZSET) เป็นโครงสร้างข้อมูลที่มีคุณสมบัติของทั้ง Set (สมาชิกไม่ซ้ำกัน) และ Skip List (เรียงลำดับ)

คุณสมบัติหลัก

  1. Unique Members + Score: แต่ละสมาชิกต้องไม่ซ้ำกัน และมีค่า Score เป็นตัวเลข (Floating Point Number) กำหนดอยู่
  2. เรียงลำดับอัตโนมัติ: สมาชิกทั้งหมดจะถูกเรียงลำดับจากน้อยไปมากตามค่า Score โดยอัตโนมัติ

ตัวอย่างการใช้งาน Sorted Set

Leaderboard หรือ Ranking System

คำสั่งคำอธิบาย
ZADD leaderboard 1500 user:anuwongเพิ่ม anuwong ด้วยคะแนน 1500
ZADD leaderboard 2200 user:peterเพิ่ม peter ด้วยคะแนน 2200
ZRANGE leaderboard 0 9 WITHSCORESดึง 10 อันดับแรกของ Leaderboard (เรียงจากน้อยไปมาก)
ZREVRANGE leaderboard 0 9 WITHSCORESดึง 10 อันดับสูงสุด (เรียงจากมากไปน้อย)
ZRANK leaderboard user:peterค้นหาอันดับ (Index) ของ peter จากลำดับที่น้อยที่สุด
← Biome ยุติสงครามระหว่าง ESLint และ Prettier