“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?“
“那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”
像这种 65 哥通过朋友圈发布消息,关注 65 哥的好友能收到通知的场景叫做「发布/订阅机制」。
今天不聊小姐姐,深入了解下 「Redis 发布/订阅机制」。的原理与实战运用。
Redis 通过 SUBSCRIBE,UNSUBSCRIBE和PUBLISH 实现发布订阅消息传递模式,Redis 提供了两种模式实现,分别是「发布/订阅到频道」和「发布\订阅到模式」。
Redis 发布订阅简介
Redis 发布订阅(Pus/Sub)是一种消息通信模式:发送者通过 PUBLISH
发布消息,订阅者通过 SUBSCRIBE
订阅接收消息或通过UNSUBSCRIBE
取消订阅。
主要包含三个部分组成:「发布者」、「订阅者」、「Channel」。
发布者和订阅者属于客户端,Channel 是 Redis 服务端,发布者将消息发布到频道,订阅这个频道的订阅者则收到消息。
如下图所示,三个「订阅者」订阅「ChannelA」频道:
这时候,小组长往「ChannelA」发布消息,这个消息的订阅者就会收到消息「关注码哥字节,提升技术」:
Pub/Sub 实战
废话不多说,知道基本概念以后,学习一个技术第一步先把它跑起来,接着才是探索原理,从而达到「知其然,知其所以然」的境界 。
一共有两种模式实现「发布\订阅」:
- 使用频道(Channel)的发布订阅;
- 使用模式(Pattern)的发布订阅。
需要注意的是,发布订阅机制与 db 空间无关,比如在 db 10 发布, db0 的订阅者也会收到消息。
通过频道(Channel)实现
三步走:
- 订阅者订阅频道;
- 发布者向「频道」发布消息;
- 所有订阅「频道」的订阅者收到消息。
订阅者订阅频道
使用 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」频道接受组长的消息,消息响应体分别表示:
- 消息类型:subscribe、m