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

Sets & Sorted Sets: ภาพรวม

Redis มี collection สองประเภทที่รับประกันว่า สมาชิกแต่ละตัวจะปรากฏได้มากที่สุดหนึ่งครั้ง:

ประเภทลำดับข้อมูลเพิ่มเติมเหมาะสำหรับ
Setไม่มี (hash-table)ไม่มีTags, ตรวจสอบสมาชิก, set algebra
Sorted Setตามคะแนน (float64)คะแนนต่อสมาชิกLeaderboard, ฟีดที่มีอันดับ, range query

ทั้งสองประเภทเก็บ unique strings เหมือนกัน ข้อแตกต่างคือ Sorted Set แนบ score เป็น floating-point ให้กับสมาชิกแต่ละตัว และรักษาลำดับตามค่านั้นตลอดเวลา

Set คือ collection ของ string ที่ไม่มีลำดับและไม่ซ้ำกัน การเพิ่มค่าเดิมสองครั้งไม่มีผล

127.0.0.1:6379> SADD lang:tags "python" "go" "rust" "go"
(integer) 3
127.0.0.1:6379> SMEMBERS lang:tags
1) "rust"
2) "go"
3) "python"
127.0.0.1:6379> SCARD lang:tags
(integer) 3
SADD lang:tags "python" "go" "rust" "go"
SMEMBERS lang:tags
SCARD lang:tags

Sorted Set จับคู่สมาชิกแต่ละตัวกับคะแนน สมาชิกจะถูกดึงออกมาตามลำดับคะแนนเสมอ

127.0.0.1:6379> ZADD scores 1500 "alice" 2200 "bob" 980 "carol"
(integer) 3
127.0.0.1:6379> ZRANGE scores 0 -1 WITHSCORES
1) "carol"
2) "980"
3) "alice"
4) "1500"
5) "bob"
6) "2200"
127.0.0.1:6379> ZRANK scores "alice"
(integer) 1
ZADD scores 1500 "alice" 2200 "bob" 980 "carol"
ZRANGE scores 0 -1 WITHSCORES
ZRANK scores "alice"
  • Set — ต้องการตอบคำถาม “X เป็นสมาชิกหรือเปล่า?” หรือ “A กับ B มีอะไรเหมือนกัน?” อย่างรวดเร็ว
  • Sorted Set — ต้องการการเรียงลำดับ, การจัดอันดับ, หรือ range query (เช่น “ผู้เล่นที่มีคะแนนระหว่าง 1000 ถึง 2000”)
บทเรียนหัวข้อ
Sets & Sorted Sets: ภาพรวมหน้านี้ — ประเภทและการลองใช้เบื้องต้น
SetsSADD, SREM, SMEMBERS, SISMEMBER, SCARD, SRANDMEMBER, SPOP
Set OperationsSINTER, SUNION, SDIFF และ STORE variants
Sorted SetsZADD, ZSCORE, ZRANGE, ZREVRANGE, ZRANK, ZRANGEBYSCORE, ZINCRBY, ZCARD, ZREM
Leaderboardsสร้าง leaderboard จริงด้วย Sorted Sets
อะไรคือสิ่งที่ทั้ง Set และ Sorted Set รับประกันเหมือนกัน?
Sorted Set เก็บข้อมูลเพิ่มเติมอะไรต่อสมาชิกแต่ละตัว?
จะเกิดอะไรขึ้นเมื่อ ZADD สมาชิกที่มีอยู่แล้วใน Sorted Set?