订阅发布简介:
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,接收者(sub)接收消息。
Redis客户端可以订阅任意数量的频道。
订阅/发布消息图:
消息发送者、消息接收者、频道(图中的Redis Server)
下图展示了频道channel1,与订阅这个频道的三个客户端(client2、client5、client1)之间的关系。
当有新消息通过PUBLISH命令发送给频道channel1时,此消息就会被发送给订阅它的三个客户端。
命令
这些命令被广泛用于构建即时通信应用,如网络聊天室(chatroom)、实时广播、实时提醒等。
| 命令 | 描述 |
| ——————————————- | ———————————- |
| [PSUBSCRIBE pattern [pattern …]] | 订阅一个或多个符合给定模式的频道。 |
| PUBSUB subcommand [argument [argument …]] | 查看订阅与发布系统状态。 |
| PUBLISH channel message | 将信息发送到指定的频道。 |
| PUNSUBSCRIBE [pattern [pattern …]] | 退订所有给定模式的频道。 |
| SUBSCRIBE channel [channel …] | 订阅给定的一个或多个频道的信息。 |
| UNSUBSCRIBE [channel [channel …]] | 指退订给定的频道。 |
测试
1 | # 1.开启Redis服务端 |
原理
- Redis是使用C实现的,通过分析 Redis 源码里的
pubsub.c
文件,了解发布和订阅机制的底层实现,籍此加深对 Redis 的理解。 - Redis 通过
publish
、subscribe
和psubscribe
等命令实现发布和订阅功能。 - 通过
SUBSCRIBE
命令订阅某频道后,redis-server
里维护了一个字典,字典的键就是一个个 channel (频道),而字典的值则是一个链表,链表中保存了所有订阅这个channel
的客户端(即保存哪些人订阅了此频道)。SUBSCRIBE
命令的关键,就是将客户端添加到给定channel
的订阅链表中。 - 通过
PUBLISH
命令向订阅者发送消息,redis-server
会使用给定的频道作为键,在它所维护的channel
字典中查找记录了订阅这个频道的所有客户端的链表,遍历这个链表,将消息发布给所有订阅者。 - Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个
key
值进行消息发布及消息订阅,当一个key
值上进行了消息发布后,所有订阅它的客户端都会收到相应 的消息。这一功能明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。
使用场景
1、实时聊天系统
2、实时消息系统
3、订阅、关注系统
其实更多时候都是使用MQ(消息中间件)来做的。