ในบทเรียนนี้ เราจะเรียนรู้วิธีการใช้ Redis datastore เป็นระบบ messaging แบบ publish/subscribe
ระบบ Redis Pub/Sub
Redis นำรูปแบบ messaging paradigm Publish/Subcribe มาใช้ ตามรูปแบบนี้ ผู้ส่ง (publisher) ของข้อความไม่ได้เขียนโปรแกรมเพื่อส่งข้อความโดยตรงไปยังผู้รับ (subscriber) พวกเขาส่ง (publish) ข้อความไปยัง channel เฉพาะ โดยไม่ทราบว่ามีผู้รับ (subscriber) ใดจะรับประทานข้อความหรือไม่ ผู้รับ (subscriber) ที่ต้องการรับประทานข้อความจะแสดงความสนใจโดยการสมัครรับ (subscribe) จาก channel หนึ่งหรือหลายรายการ และจะได้รับข้อความที่เผยแพร่ไปยัง channel เหล่านั้นเท่านั้น โดยไม่ทราบว่าผู้ส่ง (publisher) ใดเป็นผู้ส่งข้อความ

ในภาษา Redis ผู้ส่งข้อความเรียกว่า Publisher เพราะเผยแพร่ข้อความไปยัง channel และผู้รับข้อความเรียกว่า Subscriber เพราะสมัครรับจาก channel หนึ่งหรือหลายรายการเพื่อรับประทานข้อความ ข้อความสามารถมีข้อมูลทุกประเภทได้ อาจเป็นข้อความข้อความธรรมดา หรือข้อมูลเกี่ยวกับงาน (task) Subscriber สามารถสมัครรับจาก channel ได้ไม่จำกัดจำนวน และ Publisher สามารถเผยแพร่ข้อความไปยัง channel ใดก็ได้
การแยกความผูกพัน (decoupling) ระหว่าง publisher และ subscriber ทำให้ระบบมีความสามารถในการขยาย (scalability) และความยืดหยุ่น (flexibility)
Redis Pub/Sub ไม่มีความเกี่ยวข้องกับ Redis Key-Value database ไม่รบกวนกันในทุกระดับ รวมถึง database number ดังนั้น เช่น ถ้า publisher เผยแพร่ข้อความบน db index 10 subscriber บน db index 1 ก็จะรับข้อความได้
คำสั่ง Redis Pub/Sub
คำสั่งสำคัญทั้งหมดที่เกี่ยวข้องกับ Redis pub/sub มีดังนี้:
| S.No | Command | Description |
|---|---|---|
| 1 | PSUBSCRIBE | สมัครรับจาก channel หนึ่งหรือหลายรายการที่ตรงกับ pattern ที่กำหนด |
| 2 | PUBSUB | แสดงสถานะของระบบ Pub/Sub |
| 3 | PUBLISH | เผยแพร่ข้อความไปยัง channel เฉพาะ |
| 4 | PUNSUBSCRIBE | ยกเลิกการสมัครรับจาก channel หนึ่งหรือหลายรายการที่ตรงกับ pattern |
| 5 | SUBSCRIBE | สมัครรับจาก channel หนึ่งหรือหลายรายการ |
| 6 | UNSUBSCRIBE | ยกเลิกการสมัครรับจาก channel หนึ่งหรือหลายรายการ |
ตัวอย่าง
ในตัวอย่างนี้ เราจะใช้ redis-cli 3 instance เพื่อสาธาระระบบ Redis pub/sub โดย client หนึ่งสมัครรับจาก channel C1 และ C2 และอีกสอง client เผยแพร่ข้อความไปยัง channel C1 และ C2 ตามลำดับ
1. Client แรกสมัครรับจาก channel C1 และ C2

2. Client ที่สองเผยแพร่ข้อความ Hello ไปยัง channel C1

3. Client ที่สามเผยแพร่ข้อความ World ไปยัง channel C2

4. Client แรกแสดงข้อความที่ถูก push มาจาก channel C1 และ C2

อ้างอิง
- Pub Sub Command Docs
หากชอบบทเรียนนี้ กรุณาแบ่งปันความคิดเห็นและแชร์ให้ผู้อื่นด้วยครับ