Bài 10: Redis Pub/Sub
Giới thiệu về Pub/Sub trong Redis:
Pub/Sub (Publish/Subscribe) là gì?
- Pub/Sub là một mô hình nhắn tin (messaging pattern) cho phép các ứng dụng gửi và nhận thông báo theo cách không đồng bộ. Trong mô hình này, một ứng dụng (publisher) có thể gửi thông báo mà không cần biết ai sẽ nhận nó, và một hoặc nhiều ứng dụng khác (subscribers) có thể nhận thông báo mà không cần biết nguồn gửi là ai.
Lợi ích của Pub/Sub:
Giảm sự phụ thuộc giữa các thành phần trong hệ thống.
Tăng tính linh hoạt và khả năng mở rộng.
Hỗ trợ giao tiếp không đồng bộ giữa các dịch vụ.
Các lệnh cơ bản:
1. PUBLISH:
Mô tả:
- Lệnh
PUBLISHdùng để gửi một thông báo đến tất cả các subscribers đang lắng nghe trên một kênh (channel) cụ thể.
- Lệnh
Cú pháp:
PUBLISH channel messageVí dụ:
PUBLISH news "Breaking News: New Redis Version Released!"- Lệnh này gửi thông báo
"Breaking News: New Redis Version Released!"đến tất cả các subscribers đang lắng nghe trên kênhnews.
- Lệnh này gửi thông báo
2. SUBSCRIBE:
Mô tả:
- Lệnh
SUBSCRIBEdùng để đăng ký lắng nghe một hoặc nhiều kênh. Khi có thông báo mới được gửi đến kênh này, subscriber sẽ nhận được thông báo đó.
- Lệnh
Cú pháp:
SUBSCRIBE channel [channel ...]Ví dụ:
SUBSCRIBE news sports- Lệnh này đăng ký lắng nghe các kênh
newsvàsports.
- Lệnh này đăng ký lắng nghe các kênh
3. UNSUBSCRIBE:
Mô tả:
- Lệnh
UNSUBSCRIBEdùng để hủy đăng ký lắng nghe một hoặc nhiều kênh. Nếu không chỉ định kênh nào, subscriber sẽ hủy đăng ký tất cả các kênh đang lắng nghe.
- Lệnh
Cú pháp:
UNSUBSCRIBE [channel ...]Ví dụ:
UNSUBSCRIBE news- Lệnh này hủy đăng ký lắng nghe kênh
news.
- Lệnh này hủy đăng ký lắng nghe kênh
4. PSUBSCRIBE:
Mô tả:
- Lệnh
PSUBSCRIBEdùng để đăng ký lắng nghe các kênh khớp với một mẫu (pattern). Khi có thông báo mới được gửi đến bất kỳ kênh nào khớp với mẫu này, subscriber sẽ nhận được thông báo đó.
- Lệnh
Cú pháp:
PSUBSCRIBE pattern [pattern ...]Ví dụ:
PSUBSCRIBE news.*- Lệnh này đăng ký lắng nghe tất cả các kênh bắt đầu bằng
news..
- Lệnh này đăng ký lắng nghe tất cả các kênh bắt đầu bằng
5. PUNSUBSCRIBE:
Mô tả:
- Lệnh
PUNSUBSCRIBEdùng để hủy đăng ký lắng nghe các kênh khớp với một mẫu. Nếu không chỉ định mẫu nào, subscriber sẽ hủy đăng ký tất cả các mẫu đang lắng nghe.
- Lệnh
Cú pháp:
PUNSUBSCRIBE [pattern ...]Ví dụ:
PUNSUBSCRIBE news.*- Lệnh này hủy đăng ký lắng nghe tất cả các kênh bắt đầu bằng
news..
- Lệnh này hủy đăng ký lắng nghe tất cả các kênh bắt đầu bằng
Ví dụ thực tiễn:
Sử dụng Pub/Sub để xây dựng hệ thống thông báo thời gian thực:
Scenario: Bạn đang phát triển một ứng dụng tin tức và cần gửi thông báo thời gian thực đến các người dùng khi có bài viết mới.
Bước 1: Publisher gửi thông báo về bài viết mới:
PUBLISH news "New article published: Redis Pub/Sub Explained!"Bước 2: Subscriber đăng ký lắng nghe kênh tin tức:
SUBSCRIBE news- Mỗi khi có thông báo mới được gửi đến kênh
news, subscriber sẽ nhận được thông báo đó.
- Mỗi khi có thông báo mới được gửi đến kênh
Bước 3: Publisher gửi thông báo về một loại bài viết cụ thể:
PUBLISH news.technology "New tech article published: Redis Streams!"Bước 4: Subscriber đăng ký lắng nghe các kênh tin tức công nghệ:
PSUBSCRIBE news.technology.*- Mỗi khi có thông báo mới được gửi đến các kênh bắt đầu bằng
news.technology., subscriber sẽ nhận được thông báo đó.
- Mỗi khi có thông báo mới được gửi đến các kênh bắt đầu bằng
Các tính năng bổ sung của Pub/Sub:
6. Pattern Matching (Khớp mẫu):
Mô tả:
- Redis hỗ trợ khớp mẫu khi đăng ký lắng nghe kênh. Bạn có thể sử dụng ký tự đại diện
*để khớp với nhiều kênh cùng lúc.
- Redis hỗ trợ khớp mẫu khi đăng ký lắng nghe kênh. Bạn có thể sử dụng ký tự đại diện
7. Message Ordering (Thứ tự thông báo):
Mô tả:
- Thông báo được gửi đến subscribers theo thứ tự mà chúng được nhận bởi Redis. Điều này đảm bảo rằng các thông báo được xử lý theo đúng thứ tự thời gian.
8. Scalability (Khả năng mở rộng):
Mô tả:
- Redis Pub/Sub có thể được mở rộng để xử lý hàng nghìn kênh và hàng triệu thông báo mỗi giây. Điều này giúp hệ thống có thể mở rộng để đáp ứng nhu cầu cao.
Câu hỏi củng cố kiến thức:
Lệnh nào dùng để gửi một thông báo đến tất cả các subscribers trên một kênh?
PUBLISH.
Lệnh nào dùng để đăng ký lắng nghe một hoặc nhiều kênh?
SUBSCRIBE.
Làm thế nào để hủy đăng ký lắng nghe một hoặc nhiều kênh?
- Sử dụng lệnh
UNSUBSCRIBE.
- Sử dụng lệnh
Lệnh nào dùng để đăng ký lắng nghe các kênh khớp với một mẫu?
PSUBSCRIBE.
Làm thế nào để hủy đăng ký lắng nghe các kênh khớp với một mẫu?
- Sử dụng lệnh
PUNSUBSCRIBE.
- Sử dụng lệnh