redis之消息订阅发布

一、简介

  • 概念: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的更加强大。

发布了197 篇原创文章 · 获赞 86 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/103522373