有時候我們的API會處理運算功能, 因此會設計為多機來進行分散運算的作業, 但問題來了! 假設我們設計一個修改的API, 修改某個值, 但其它機器的API究竟要如何知曉並更新值呢?

這時候就需要來個通知與訂閱
我們在佇列系列主題有提到Queue的概念, 歡迎參考一下, 這會與我們的通知訂閱的概念相似:
那在Redis可以怎麼做呢? 關鍵的Channel通道, 所有的訊息傳遞都會在建立起來的通道上傳輸。

通知端
對哪個頻道發布訊息。
channel = "notifications"
message = "通知訊息!"
redis_client.publish(channel, message)
print(f"Message published to channel '{channel}': {message}")
訂閱端
對哪個頻道訂閱訊息。
pubsub = redis_client.pubsub()
channel = "notifications"
pubsub.subscribe(channel)
print(f"Subscribed to channel '{channel}'")
# 等待消息
for message in pubsub.listen():
if message['type'] == 'message': # 過濾出普通消息類型
print(f"Received message: {message['data']}")
注意事項
Redis的Channel概念並不是像佇列哦! 它並不能保存數據, 因此是一種即時通知的概念, 在訂閱之前的訊息在訂閱之後試看不到的, 這點需要注意一下。
還有以下幾點也是值得注意的部份:
- 一旦訂閱某個頻道, 會接收到該頻道的所有訊息, 因此雜訊要自己濾除。
- 無順序性及重試機制。
結語
在Redis的通知訂閱機制只是讓我們在上線後可以透過該渠道互通訊息, 但若要更加的穩健的話請選擇Kafka、RabbitMQ、RedisStream…等專門處理消息隊列的系統。