หัดใช้ Redis แบบลิงก็เข้าใจ (ตอนที่ 2)

หลังจากผ่านตอนที่ 1 มาเดือนกว่าๆ ถึงจะว่างเขียน เรามาต่อกันเลยถึงการใช้งานครับ

รันโปรแกรม Redis ให้เรียบร้อย และเพิ่ม IP เข้าไปในโปรแกรม RedisInsight ซะ ถ้ารันเครื่องตัวเองก็ 127.0.0.1 port 6379 โลด

การใช้ GET/SET

เข้ามาแล้ว กด CLI

คำสั่งแรกที่ใช้กันบ่อย คือ GET และ SET
Syntrax คือ GET/SET ชื่อ key ค่าของ key

ลองพิมพ์ SET myname test และกด Enter ดู มันจะตอบกลับมาว่า OK

วิธีการอ่านค่าออกมา ให้สั่ง GET myname

จะเห็นว่า เราอ่านค่าที่เซทไว้ในตัวแปรได้แล้ว เย้!

ทั้งนี้ เราสามารถกด Refresh ได้ จะเห็นว่า key ของตัว myname จะเพิ่มเข้ามาใน GUI แล้ว เราสามารถกดลบ หรือแก้ไขได้จากตรงนี้เช่นกันโดยไม่ต้องใช้ CLI

การตั้งให้ Key สามารถหมดอายุได้เมื่อผ่านไปพักนึง ซึ่งเหมาะมากกับงาน Caching ทำให้เราไม่ต้องมาลบเอง redis จะลบให้เองแล้วพอโปรแกรมเราเชคว่าไม่มี Key นี้ก็ SET เข้าไปใหม่ซะ สะดวกสุดๆ

สั่ง EXPIRE myname 10 เพิ่มเข้าไปใน CLI แล้ว enter ดูผล

เมื่อ refresh GUI มาแล้วจะเห็นว่า key เปลี่ยนจาก no limit เป็นการนับถอยหลัง

และเมื่อเรากด Refresh อีกที key ตัวนี้จะหายไปแล้ว!

การคั่น Naming

ปกติแล้ว redis สามารถสร้างอะไรที่คล้ายๆ โฟลเดอร์ได้โดยใช้ : เป็นตัวคั่น ซึ่งจะช่วยในกรณีที่ key มีความซับซ้อน หรือ caching แยก user กัน มาลองสร้างใหม่ สั่ง

SET username:01 test
SET username:02 monkey

แล้วดูผล

เราจะเห็นว่าใน GUI จะมีการแบ่ง Folder ออกมา

ในโปรแกรม Redis GUI จะแสดงผลต่างกันไป ซึ่งอาจจะดูง่ายกว่า แล้วแต่กรณี

การอ่านค่าใช้เหมือนเดิมครับ GET username:01 มันจะตอบ test กลับมา

กรณีนี้ใช้ประโยชน์การแบ่ง caching ไม่ให้ข้อมูลไปปนกับคนอื่น เช่น แคชประวัติการล๊อกอินของคนๆ นั้น ประวัติการซื้อ ฯลฯ

คำสั่ง PUB/SUB

หลังจาก section นี้ผมจะใช้ Redis CLI ธรรมดานะครับ เนื่องจากโปรแกรม RedisInsight จะไม่สามารถเปิดสองจอเพื่อทดสอบได้

ให้เรารัน Redis CLI ขึ้นมาสองตัวครับ

ตัวแรก ให้พิมพ์คำสั่ง SUBSCRIBE room1 หรือชื่อ channel ที่เราจะรับข้อความ

อีกตัวนึงที่เปิดไว้ ลองพิมพ์ PUBLISH room1 HelloWorld!

เราจะเห็นว่ามีการส่งข้อความไปหาคนที่ Subscribe ได้คล้าย Chat Room ซึ่งสามารถเอาไปใช้ประโยชน์ได้หลายอย่างมาก

ใช้ PUSH / POP ทำคิว

ซึ่งคำสั่งที่ใช้ทั่วไป จะมีดังนี้ LPUSH, RPUSH, LPOP, RPOP
ต่างกันยังไง?

ลองพิมพ์ไปตามนี้

LPUSH test 01
LPUSH test 02
RPUSH test 03

แล้วดูผลลัพทธ์ใน GUI

จะเห็นว่า LPUSH นั้น จะเอาข้อมูลไปแทรกด้านบนคล้าย Stack ส่วน RPUSH นั้น จะเอาข้อมูลไปต่อท้าย คล้าย Queue

ในทางตรงกันข้าม RPOP จะนำข้อมูลจากท้ายตารางออกมาก่อน ส่วน LPOP จะนำข้อมูลจากด้านบนตารางออกมาก่อน

ซึ่งโดยปกติแล้วการทำ Message Queue นั้น ผู้ส่งคำสั่ง จะใช้ RPUSH เพื่อนำข้อมูลไปต่อท้าย ส่วนผู้รับข้อมูลไปประมวลผลนั้น จะใช้ LPUSH เพื่อเรียกข้อมุลจากด้านบนออกมาก่อน

Use Case: กรณีที่เวปเก็บข้อมูลอะไรซักอย่าง แล้วไม่สามารถยิงเข้า DB ตรงๆ ในทันทีได้ ไม่งั้นจะช้ามาก (Load DB เยอะ) ก็สามารถยิงเข้า Message Queue ของ Redis แล้วให้ระบบหลังบ้านคอยดึงข้อมุลในคิวออกมายัดเข้า DB นั่นเอง ลดภาระโหลดได้

 

Comments are closed.