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

Lists & Hashes: ภาพรวม

โมดูลนี้แนะนำโครงสร้างข้อมูลที่มีประโยชน์ที่สุดสองชนิดใน Redis ได้แก่ Lists และ Hashes

List คือชุดข้อมูลแบบมีลำดับที่ใช้ doubly-linked list เป็นโครงสร้างภายใน คุณสามารถ push และ pop ข้อมูลจากปลายทั้งสองได้ในเวลา O(1) ไม่ว่าจะมีสมาชิกกี่รายการ จึงเหมาะอย่างยิ่งสำหรับคิวงาน สแต็ก ฟีดกิจกรรม และรายการไอเทมล่าสุด

Hash คือ map แบบ field-value ที่เก็บอยู่ภายใต้ key เดียว ลองนึกภาพเหมือน dict ของ Python หรือ object ของ JavaScript คุณสามารถกำหนดและดึงค่าของแต่ละ field ได้แบบ atomic หมายความว่าสามารถอัปเดตอีเมลของผู้ใช้โดยไม่กระทบข้อมูล field อื่น ๆ เลย

127.0.0.1:6379> RPUSH notifications "login" "purchase" "logout"
(integer) 3
127.0.0.1:6379> LRANGE notifications 0 -1
1) "login"
2) "purchase"
3) "logout"
127.0.0.1:6379> HSET user:1 name "Ada" email "[email protected]" age "30"
(integer) 3
127.0.0.1:6379> HGETALL user:1
1) "name"
2) "Ada"
3) "email"
5) "age"
6) "30"
ประเภทใช้เมื่อต้องการ…ตัวอย่าง
Listข้อมูลมีลำดับ เข้าถึงหัวท้ายด้วย O(1)คิวข้อความ, ฟีดกิจกรรม, คำค้นหาล่าสุด
HashField มีชื่อภายใต้ key เดียว อัปเดตบางส่วนได้โปรไฟล์ผู้ใช้, ข้อมูลสินค้า, ข้อมูล session
บทเรียนหัวข้อ
Lists & Hashes: ภาพรวมหน้านี้ — Lists, Hashes และวิธีเลือกใช้
ListsLPUSH, RPUSH, LRANGE, LLEN, LINDEX, LSET, LREM, LTRIM
Lists as Queues & StacksLPUSH+RPOP (FIFO), LPUSH+LPOP (stack), BLPOP/BRPOP
HashesHSET, HGET, HMGET, HGETALL, HDEL, HEXISTS, HKEYS, HVALS, HLEN
Hash Objectsการ model object, HINCRBY, HINCRBYFLOAT, HSETNX

ลองเพิ่มข้อมูลลงใน list และเก็บ field ต่าง ๆ ใน hash:

127.0.0.1:6379> RPUSH tasks "write tests" "deploy" "notify team"
(integer) 3
127.0.0.1:6379> LRANGE tasks 0 -1
1) "write tests"
2) "deploy"
3) "notify team"
127.0.0.1:6379> HSET product:99 name "Widget" price "9.99" stock "100"
(integer) 3
127.0.0.1:6379> HGET product:99 name
"Widget"
127.0.0.1:6379> HGET product:99 price
"9.99"
RPUSH tasks "write tests" "deploy" "notify team"
LRANGE tasks 0 -1
HSET product:99 name "Widget" price "9.99" stock "100"
HGET product:99 name
HGET product:99 price
LPUSH และ RPUSH บน Redis List มี time complexity เท่าใด?
คำสั่งใดที่ดึงข้อมูลทุก field และ value จาก Redis Hash ออกมา?
คุณต้องการเก็บข้อมูลผู้ใช้ที่มี field เช่น name, email และ age ไว้ใน key เดียว ควรใช้ประเภทใด?
โครงสร้างข้อมูลใดเหมาะสำหรับสร้างคิวข้อความแบบ FIFO ใน Redis?