架构
- 消息发布者
- 消息订阅者
- 频道
使用
先订阅频道
127.0.0.1:6379> SUBSCRIBE myChannel
另一个用户推送消息到频道
127.0.0.1:6379> PUBLISH myChannel "Hello world"
订阅者就可以接收到推送的消息
127.0.0.1:6379> SUBSCRIBE myChannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe" # 开始订阅
2) "myChannel" # 订阅的频道
3) (integer) 1
1) "message" # 消息
2) "myChannel" # 来自哪个频道
3) "Hello world" # 消息内容
原理
Redis是用C语言写的,源码在pubsub.c文件中。
通过Subscribe订阅某个频道后,Redis-server维护了一个字典,
- 字典的键就是频道,
- 字典的值是链表,链表中保存了所有订阅者;
通过Publish命令向频道发送消息后,
- redis-server会通过频道找到所有的订阅者,
- 然后将消息发送给所有的订阅者
使用场景
- 实时消息系统
- 实时聊天
- 订阅,关注系统
更复杂的场景使用MQ去做,消息中间件。