redis之消息订阅发布
程序员文章站
2022-05-21 09:22:19
...
一、简介
- 概念:redis消息订阅发布,指的是进程间的一种消息通信模式:发送者(publish)发送消息,订阅者(subscribe)订阅消息。通过subscribe命令可以让客户端订阅任意数量的频道,每当有新信息发送到被订阅的频道时,信息就会被发送给所有订阅指定频道的客户端。
- 订阅/发布消息图:
- 发布/订阅原理:
- 每个 Redis 服务器进程都维持着一个表示服务器状态的 redis.h/redisServer 结构, 结构的 pubsub_channels 属性是一个字典, 这个字典就用于保存订阅频道的信息,其中,字典的键为正在被订阅的频道, 而字典的值则是一个链表, 链表中保存了所有订阅这个频道的客户端。如下图:
- 订阅:通过 pubsub_channels 字典, 程序只要检查某个频道是否为字典的键, 就可以知道该频道是否正在被客户端订阅; 只要取出某个键的值, 就可以得到所有订阅该频道的客户端的信息;
- 取消订阅:从 pubsub_channels 字典的给定频道(键)中, 删除关于当前客户端的信息, 这样被退订频道的信息就不会再发送给这个客户端;
二、常用命令
publish |
发送消息到指定的channel信道 |
subscribe |
订阅一个或者多个信道 |
unsubscribe |
取消订阅指定的信道 |
psubscribe |
订阅一个或多个符合给定模式的信道 |
punsubscribe |
取消订阅一个或多个符合给定模式的信道 |
pubsub |
查看订阅发布的状态 |
下面通过一些简答的示例说明redis中发布、订阅消息的使用方法。
三、示例
- (一)订阅多个信道
终端1: 订阅频道1、频道2、频道3:
SUBSCRIBE channel1 channel2 channel
终端2:向频道内发布消息:
PUBLISH channel1 hellpchannel1
PUBLISH channel2 hellpchannel2
可见,订阅终端只要监听到信道有发布者发布的消息,就会马上被接收到。如果熟悉消息中间件的小伙伴们应该很容易理解发布、订阅消息。
- (二)模式匹配
订阅多个,通配符*:
终端1:订阅名称以channel_*匹配的频道:
PSUBSCRIBE channel_*
终端2:向频道内发布消息:
PUBLISH channel_1 hellpchannel1
PUBLISH channel_2 hellpchannel2
PUBLISH channel3 hellpchannel3
可见,只有满足信道通配符的要求,才能正确地接收到消息。
四、总结
以上就是关于redis中消息订阅发布的简单说明,由于存在不支持消息持久化、客户端需要一直监听等一些缺点,实际项目中一般比较少使用redis作为消息发布订阅的解决方案,一般会选择例如rabbitmq、activeMQ等消息中间件来处理,功能比redis的更加强大。
上一篇: 【转】画stacked bar
下一篇: redis之订阅/发布消息