Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách sử dụng kho dữ liệu Redis như một hệ thống messaging publish/subscribe (xuất bản/đăng ký).
Hệ thống Redis Pub/Sub
Redis triển khai mô hình messaging Publish/Subscribe. Theo mô hình này, người gửi (publisher) của thông điệp không được lập trình để gửi thông điệp trực tiếp đến một người nhận cụ thể (subscriber). Chúng gửi (publish) thông điệp của mình đến một kênh (channel) cụ thể, mà không biết người nhận nào (nếu có) sẽ tiêu thụ thông điệp đó. Người nhận (subscriber), muốn tiêu thụ thông điệp, thể hiện sự quan tâm bằng cách đăng ký (subscribe) một hoặc nhiều kênh, và họ sẽ chỉ nhận được các thông điệp được publish đến những kênh đó, mà không biết người gửi nào đã gửi thông điệp.

Trong thuật ngữ Redis, người gửi thông điệp gọi là Publisher vì họ publish thông điệp đến một kênh, và người nhận gọi là Subscriber vì họ subscribe một hoặc nhiều kênh để tiêu thụ thông điệp. Một thông điệp có thể chứa bất kỳ loại thông tin nào, có thể là tin nhắn văn bản đơn giản hoặc thông tin về một tác vụ (task). Một subscriber có thể đăng ký bất kỳ số lượng kênh nào và một publisher có thể publish thông điệp của mình đến bất kỳ kênh nào.
Sự tách biệt (decoupling) này giữa publisher và subscriber cho phép khả năng mở rộng (scalability) và linh hoạt (flexibility).
Redis Pub/Sub không có liên quan đến cơ sở dữ liệu Key-Value của Redis. Nó không can thiệp vào nó ở bất kỳ cấp độ nào, bao gồm cả số database. Ví dụ, nếu publisher publish thông điệp trên db index 10, thì một subscriber trên db index 1 vẫn sẽ nhận được thông điệp.
Các lệnh Redis Pub/Sub:
Tất cả các lệnh quan trọng liên quan đến redis pub/sub như sau:
| STT | Lệnh | Mô tả |
|---|---|---|
| 1 | PSUBSCRIBE | Đăng ký một hoặc nhiều kênh khớp với mẫu cho trước |
| 2 | PUBSUB | Cho biết trạng thái của hệ thống Pub/Sub |
| 3 | PUBLISH | Publish một thông điệp đến kênh cụ thể |
| 4 | PUNSUBSCRIBE | Hủy đăng ký từ một hoặc nhiều kênh khớp với mẫu cho trước |
| 5 | SUBSCRIBE | Đăng ký một hoặc nhiều kênh |
| 6 | UNSUBSCRIBE | Hủy đăng ký từ một hoặc nhiều kênh |
Ví dụ:
Trong ví dụ này, chúng ta sẽ dùng ba instance khác nhau của redis-cli để demo hệ thống redis pub/sub, nơi một client đăng ký hai kênh C1 và C2 và hai client khác publish thông điệp đến kênh C1 và kênh C2 tương ứng.
1. Client đầu tiên đăng ký kênh C1 và C2

2. Client thứ hai publish thông điệp Hello đến kênh C1

3. Client thứ ba publish thông điệp World đến kênh C2

4. Client đầu tiên hiển thị các thông điệp được đẩy từ kênh C1 và C2

Tài liệu tham khảo:
- Tài liệu lệnh Pub/Sub
Nếu bạn thấy hữu ích, hãy chia sẻ suy nghĩ của bạn trong phần bình luận và lan tỏa cho người khác nhé.