33,261
社区成员
Redis 发布订阅(Pus/Sub)是一种消息通信模式:发送者通过 PUBLISH
发布消息,订阅者通过 SUBSCRIBE
订阅接收消息或通过UNSUBSCRIBE
取消订阅。
主要包含三个部分组成:「发布者」、「订阅者」、「Channel」。
发布者和订阅者属于客户端,Channel 是 Redis 服务端,发布者将消息发布到频道,订阅这个频道的订阅者则收到消息。
如下图所示,三个「订阅者」订阅「ChannelA」频道:
这时候,小组长往「ChannelA」发布消息,这个消息的订阅者就会收到消息「关注码哥字节,提升技术」:
废话不多说,知道基本概念以后,学习一个技术第一步先把它跑起来,接着才是探索原理,从而达到「知其然,知其所以然」的境界 。
一共有两种模式实现「发布\订阅」:
需要注意的是,发布订阅机制与 db 空间无关,比如在 db 10 发布, db0 的订阅者也会收到消息。
三步走:
订阅者订阅频道
使用 SUBSCRIBE channel [channel ...]
订阅一个或者多个频道,O(n) 时间复杂度,n = 订阅的 Channel 数量。
SUBSCRIBE develop
Reading messages... (press Ctrl-C to quit)
1) "subscribe" // 消息类型
2) "develop" // 频道
3) (integer) 1 // 消息内容
执行该指令后,客户端进入订阅状态,订阅者只能使用subscribe
、unsubscribe
、psubscribe
和punsubscribe
这四个属于"发布/订阅" 的指令。
客户端「肖菜鸡」订阅了 「develop」频道接受组长的消息,消息响应体分别表示:
进入订阅后的客户端可以收到 3 种类型的消息回复:
发布者发布消息
小组长使用 PUBLISH channel message
向指定 「develop」频道发布消息。
PUBLISH develop 'do job'
(integer) 1
需要注意的是,发布的消息并不会持久化,消息发布之后还有新「开发」靓仔订阅的话,只能接收后续发布到该频道的消息。
好一个「不问过往,只争当下」。
订阅者接受消息
关注了「develop」频道的订阅者将会收到「do job」消息。
// 订阅 develop 频道
SUBSCRIBE develop
Reading messages... (press Ctrl-C to quit)
1) "subscribe" // 订阅频道成功
2) "develop" // 频道
3) (integer) 1
// 当发布者发布消息,订阅者读取到的消息如下
1) "message" // 接受到消息
2) "develop" // 频道名称
3) "do job" // 消息内容
退订频道
订阅的反向操作,「65 哥」天天在朋友圈秀恩爱,受不了了,取消订阅他的朋友圈。
使用 UNSUBSCRIBE 命令可以退订指定的「模式」不会影响通过 `subscribe 命令订阅的频道。
同样 unsubscribe
命令也不会影响通过psubscribe
命令订阅的规则。