Redis 订阅发布模式

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2、client5 和 client1 之间的关系:

4. Redis 订阅和发布模式  - 图1

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

4. Redis 订阅和发布模式  - 图2

SUBSCRIBE channel [channel …]

订阅给指定频道的信息。

PUBLISH channel message

将信息 message 发送到指定的频道 channel

应用场景

在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。

  • 今日头条订阅号、微信订阅公众号、新浪微博关注、邮件订阅系统

  • 即时通信系统(QQ、微信)

  • 群聊部落系统(微信群)

案例

微信班级群class:20170101,发布订阅模型

学生 A B C:


学生C:

订阅一个主题名叫: class:20170101

  1. 127.0.0.1:6379> SUBSCRIBE class:20170101
  2. Reading messages... (press Ctrl-C to quit)
  3. 1) "subscribe"
  4. 2) "redisChat"
  5. 3) (integer) 1

学生A:

针对 class:20170101 主题发送 消息,那么所有订阅该主题的用户都能够收到该数据。

  1. 127.0.0.1:6379> PUBLISH class:20170101 "i love peace!"
  2. (integer) 1

学生B:

针对 class:20170101 主题发送 消息,那么所有订阅该主题的用户都能够收到该数据。

  1. 127.0.0.1:6379> PUBLISH class:20170101 "go to hell"
  2. (integer) 1

最后学生C会收到 A 和 B 发送过来的消息。

  1. python@ubuntu:~$ redis-cli
  2. 127.0.0.1:6379> SUBSCRIBE class:20170101
  3. Reading messages... (press Ctrl-C to quit)
  4. 1) "subscribe"
  5. 2) "class:20170101"
  6. 3) (integer) 1
  7. 1) "message"
  8. 2) "class:20170101"
  9. 3) "i love peace!"
  10. 1) "message"
  11. 2) "class:20170101"
  12. 3) "i love peace!"
  13. 1) "message"
  14. 2) "class:20170101"
  15. 3) "go to hell"

原文: https://piaosanlang.gitbooks.io/redis/content/04_pub_sub.html