文章目錄
- 寫在前面
- 釋出訂閱的使用
- SUBSCRIBE指令
- PUBLISH指令
- 注意釋出、訂閱用戶端啟動順序!
- PUBSUB指令
- PUNSUBSCRIBE指令
- UNSUBSCRIBE指令
- PSUBSCRIBE指令
- 總結
寫在前面
Redis 釋出訂閱 (pub/sub) 是一種消息通信模式:發送者 (pub) 發送消息,訂閱者 (sub) 接收消息。
Redis 用戶端可以訂閱任意數量的頻道。
下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個用戶端 —— client2 、 client5 和 client1 之間的關系:
當有新消息通過 PUBLISH 指令發送給頻道 channel1 時, 這個消息就會被發送給訂閱它的三個用戶端:
釋出訂閱的使用
SUBSCRIBE指令
監聽釋出到給定通道的消息。
基本文法:
SUBSCRIBE channel [channel ...]
可以同時監聽多個channel通道。
基本用法:
# 開啟監聽channeltest
127.0.0.1:6379> subscribe channeltest
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channeltest"
3) (integer) 1
PUBLISH指令
将消息釋出到一個通道。
基本文法:
PUBLISH channel message
基本用法:
# 新起一個用戶端,往channeltest發送指定的消息
127.0.0.1:6379> publish channeltest 'i am message'
(integer) 1
此時,我們在剛開始的用戶端,會受到發送過來的訂閱消息:
127.0.0.1:6379> subscribe channeltest
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channeltest"
3) (integer) 1
1) "message"
2) "channeltest"
3) "i am message"
注意釋出、訂閱用戶端啟動順序!
當先啟動訂閱用戶端,再啟動釋出用戶端,然後釋出用戶端釋出的消息,訂閱用戶端會正常受到。
但是!當先啟動釋出用戶端,然後釋出用戶端釋出的消息,再啟動訂閱用戶端,訂閱用戶端是不會受到消息的!此時消息會丢失。
# 訂閱用戶端還未訂閱時,直接發送消息,此時傳回值是0,消息并沒有被消費也不會被儲存!
127.0.0.1:6379> publish channeltest 'i am message'
(integer) 0
PUBSUB指令
檢查釋出/訂閱子系統的狀态。
基本文法:
PUBSUB subcommand [argument [argument ...]]
基本用法:
# 顯示所有的訂閱通道
127.0.0.1:6379> pubsub channels
1) "channeltest"
# 顯示所有cc開頭的訂閱通道
127.0.0.1:6379> pubsub channels cc*
(empty list or set)
# 顯示所有ch開頭的訂閱通道
127.0.0.1:6379> pubsub channels ch*
1) "channeltest"
PUNSUBSCRIBE指令
停止監聽釋出到比對給定模式的通道的消息。
基本文法:
PUNSUBSCRIBE [pattern [pattern ...]]
基本用法:
# 停止訂閱channeltest通道
127.0.0.1:6379>
注意:用戶端訂閱時,是無法進行操作的,此指令在指令行中是不能用的
UNSUBSCRIBE指令
退訂給定的頻道。
基本文法:
UNSUBSCRIBE [channel [channel ...]]
基本用法:
# 退訂
127.0.0.1:6379>
注意:用戶端訂閱時,是無法進行操作的,此指令在指令行中是不能用的
PSUBSCRIBE指令
監聽釋出到比對給定模式的通道的消息。
基本文法:
PSUBSCRIBE pattern [pattern ...]
基本用法:
# 監聽chann開頭的所有通道
127.0.0.1:6379> psubscribe chann*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "chann*"
3) (integer) 1