หลังจากผ่านตอนที่ 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 นั่นเอง ลดภาระโหลดได้