前言
redis它也有自己的消息发布和订阅功能,这是一个比较轻量级的功能,毕竟他不是专门做这个的。如果你只是需要一个基础的发布订阅功能个而且有redis,那么你就可以使用它,我们就可以不需要再去配置RabbitMQ这些专门的消息队列
命令
命令 | 描述 |
---|---|
PSUBSCRIBE pattern [pattern …] | 订阅一个或多个符合给定模式的频道 |
PUBSUB SUBcommand [argument [argument …]] | 查看订阅与发布的系统状态 |
PUBLSH channel message | 将消息发送给指定的频道 |
PUNSUBSCRIBE pattern [pattern …] | 退订所有给定模式的频道 |
SUBSCRIBE channel [channel …] | 订阅一个或者多个给定过的频道信息 |
UNSUBSCRIBE [channel [channel …]] | 退订指定的频道指定的频道 |
发布模型
redis的发布订阅功能包括三部分:发布者(publisher)、订阅者(subscriber)和频道(channel)
- 都是通过一个字典和链表来实现的
使用
- 使用模式大概是下面这个样子
原理
redis是C 语言实现的,发布机制所有的源码基本上都在public.c文件里面
- 通过subscribe订阅某个频道后,redis-serve 维护了一个字典,字典中存在的键就是频道,而字典的值则是一个链表,链表中的信息这是存储订阅者的信息,subscribe实现的关键就是将订阅者的客户端添加到字典对应的链表中
- publish则是先遍历字典,找到频道,然后在遍历链表,将所要发送的信息通过遍历链表实现对所有订阅这个频道的客户端发送信息