Redis的頻道發布與消息訂閱
進程間的一種通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。
訂閱/發布消息圖
下圖展示了頻道channel1,以及訂閱這個頻道的三個客戶端-client2、client5、client1
當有新消息通過PUBLISH命令發送給頻道channel1時,這個消息就會被發送給訂閱它的三個客戶端。
Redis 發布訂閱命令
PSUBSCRIBE pattern [pattern ...]
訂閱一個或者多個符合模式匹配的頻道
【假設客戶端同時訂閱了某種模式和符合該模式的某個頻道,那么發送給這個頻道的消息將被客戶端接收到兩次,只不過這兩條消息的類型不同,一個是message類型,一個是pmessage類型,但其內容相同。 】
PUBSUB subcommand [argument [argument ...]]
返回由活躍頻道組成的列表,即可以查詢訂閱與發布系統的狀態
PUBLISH channel message
發送消息到指定的頻道
【其返回值為接收到該消息的訂閱者的數量】
SUBSCRIBE channel [channel ...]
訂閱一個或多個頻道
【其返回值包括客戶端訂閱的頻道,目前已訂閱的頻道數量,以及接收到的消息,其中subscribe表示已經成功訂閱了某個頻道】
PUNSUBSCRIBE [pattern [pattern ...]]
退訂所有符合模式匹配的頻道
UNSUBSCRIBE [channel [channel ...]]
退訂一個或多個頻道
【Redis采用UNSUBSCRIBE和PUNSUBSCRIBE命令取消訂閱,其返回值與訂閱類似。
由於Redis的訂閱操作是阻塞式的,因此一旦客戶端訂閱了某個頻道或模式,就將會一直處於訂閱狀態直到退出。
在SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令中,
其返回值都包含了該客戶端當前訂閱的頻道和模式的數量,當這個數量變為0時,該客戶端會自動退出訂閱狀態。】
簡單練習
客戶端先訂閱后,消息發布后才能接收到消息
- 可以一次性訂閱多個,SUBSCRIBE c1 c2 c3
- 消息發布,PUBLISH c2 hell0-redis
- 訂閱多個,通配符*,PSUBSCRIBE new*
- 收取消息,PUBLISH new1 redis2019