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