發布與訂閱(又稱pub/sub),是一種消息通信模式,特點是訂閱者(listener)負責訂閱頻道(channel),發送者(publisher)負責向頻道發送二進制字符串消息。每當有消息被發送至給定頻道時,頻道的所有訂閱者都會收到消息。
發布與訂閱
SUBSCRIBE(訂閱給定的一個或多個頻道)
UNSUBSCRIBE(退訂給定的一個或多個頻道,如果執行時沒有給定任何頻道,那么退訂所有頻道)
PUBLISH(向給定頻道發送消息)
PSUBSCRIBE(訂閱與給定模式相匹配的所有頻道)
PUNSUBSCRIBE(退訂給訂的模式,如果執行時沒有給訂任何模式,那么退訂所有模式)
下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關系:
簡單示例
上圖中我一共開了三個窗口,第一個窗口作為發送者向頻道test1發送消息,第二和第三個窗口作為訂閱者訂閱了頻道test1,發布成功后會返回接收到這條消息的訂閱者數量。發出去的消息不會被持久化,也就是說當客戶端訂閱test1后只能收到后續發布到該頻道的消息,之前發送到就收不到了,而當沒有訂閱者時, 消息會被直接丟棄。
退訂后將不會受到發送者發送的消息
redis還支持模式訂閱和模式退訂,*為模糊匹配符。
訂閱所有頻道的消息:psubscribe *
比如訂閱以ziroom.開頭的所有頻道:psubscribe ziroom.*
取消所有頻道的消息:punsubscribe *
比如取消訂閱以ziroom.開頭的所有頻道punsubscribe ziroom*
源碼學習:15天玩轉redis