架构

image.png

  1. 消息发布者
  2. 消息订阅者
  3. 频道

使用

  1. 先订阅频道

    1. 127.0.0.1:6379> SUBSCRIBE myChannel
  2. 另一个用户推送消息到频道

    1. 127.0.0.1:6379> PUBLISH myChannel "Hello world"
  3. 订阅者就可以接收到推送的消息

    1. 127.0.0.1:6379> SUBSCRIBE myChannel
    2. Reading messages... (press Ctrl-C to quit)
    3. 1) "subscribe" # 开始订阅
    4. 2) "myChannel" # 订阅的频道
    5. 3) (integer) 1
    6. 1) "message" # 消息
    7. 2) "myChannel" # 来自哪个频道
    8. 3) "Hello world" # 消息内容

    原理

    Redis是用C语言写的,源码在pubsub.c文件中。

通过Subscribe订阅某个频道后,Redis-server维护了一个字典,

  • 字典的键就是频道,
  • 字典的值是链表,链表中保存了所有订阅者;

通过Publish命令向频道发送消息后,

  • redis-server会通过频道找到所有的订阅者,
  • 然后将消息发送给所有的订阅者

image.png

使用场景

  1. 实时消息系统
  2. 实时聊天
  3. 订阅,关注系统

更复杂的场景使用MQ去做,消息中间件。