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) 3127.0.0.1:6379> LRANGE notifications 0 -11) "login"2) "purchase"3) "logout"127.0.0.1:6379> HSET user:1 name "Ada" email "[email protected]" age "30"(integer) 3127.0.0.1:6379> HGETALL user:11) "name"2) "Ada"3) "email"4) "[email protected]"5) "age"6) "30"เลือกใช้ประเภทไหนดี?
หัวข้อที่มีชื่อว่า “เลือกใช้ประเภทไหนดี?”| ประเภท | ใช้เมื่อต้องการ… | ตัวอย่าง |
|---|---|---|
| List | ข้อมูลมีลำดับ เข้าถึงหัวท้ายด้วย O(1) | คิวข้อความ, ฟีดกิจกรรม, คำค้นหาล่าสุด |
| Hash | Field มีชื่อภายใต้ key เดียว อัปเดตบางส่วนได้ | โปรไฟล์ผู้ใช้, ข้อมูลสินค้า, ข้อมูล session |
เนื้อหาในโมดูลนี้
หัวข้อที่มีชื่อว่า “เนื้อหาในโมดูลนี้”| บทเรียน | หัวข้อ |
|---|---|
| Lists & Hashes: ภาพรวม | หน้านี้ — Lists, Hashes และวิธีเลือกใช้ |
| Lists | LPUSH, RPUSH, LRANGE, LLEN, LINDEX, LSET, LREM, LTRIM |
| Lists as Queues & Stacks | LPUSH+RPOP (FIFO), LPUSH+LPOP (stack), BLPOP/BRPOP |
| Hashes | HSET, 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) 3127.0.0.1:6379> LRANGE tasks 0 -11) "write tests"2) "deploy"3) "notify team"127.0.0.1:6379> HSET product:99 name "Widget" price "9.99" stock "100"(integer) 3127.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