Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
Redis 的 subscribe 命令可以让客户端订阅任意数量的频道,
每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。

三个「订阅者」订阅「Channel1」频道:

当 Channel1 的后台发送了一个数据到 Channel1 的频道中,这三个订阅了 Channel1 的客户端就会同时收到这个数据:

| 命令 | 描述 |
|---|---|
| PSUBSCRIBE pattern [pattern …] | 订阅一个或多个符合给定模式的频道 |
| PUBSUB subcommand [argument [argument …]] | 查看订阅与发布系统状态 |
| PUBLISH channel message | 将信息发送到指定的频道 |
| PUNSUBSCRIBE [pattern [pattern …]] | 退订所有给定模式的频道 |
| SUBSCRIBE channel [channel …] | 订阅给定的一个或多个频道的信息 |
| UNSUBSCRIBE [channel [channel …]] | 退订给定的频道,说明:若没有指定channel,则默认退订所有频道 |

查看活跃的频道

通过 SUBSCRIBE 命令订阅某频道后,redis-server 里维护了一个字典,字典的键就是一个个 channel ,而字典的值则是一个链表,链表中保存了所有订阅这个 channel 的客户端。SUBSCRIBE 命令的关键,就是将客户端添加到给定 channel 的订阅链表中。
客户端订阅,就被链接到对应频道的链表的尾部,退订则就是将客户端节点从链表中移除。
缺点:
应用场景:
1、实时沟通消息系统
2、个人博客系统(粉丝关注博主,博主发送一篇博客,订阅的用户就可以监听到)
3、电商中,用户下单成功之后向指定频道发送消息,下游业务订阅支付结果这个频道处理自己相关业务逻辑
Redis的pubsub不是一种可靠的消息系统。如果场景复杂,可以使用消息中间件来做,kafka RabbitMQ ActiveMQ RocketMQ …等