欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

redis之消息订阅发布

程序员文章站 2022-05-21 09:22:19
...

一、简介

  • 概念:redis消息订阅发布,指的是进程间的一种消息通信模式:发送者(publish)发送消息,订阅者(subscribe)订阅消息。通过subscribe命令可以让客户端订阅任意数量的频道,每当有新信息发送到被订阅的频道时,信息就会被发送给所有订阅指定频道的客户端。
  • 订阅/发布消息图:

redis之消息订阅发布

  • 发布/订阅原理:
  • 每个 Redis 服务器进程都维持着一个表示服务器状态的 redis.h/redisServer 结构, 结构的 pubsub_channels 属性是一个字典, 这个字典就用于保存订阅频道的信息,其中,字典的键为正在被订阅的频道, 而字典的值则是一个链表, 链表中保存了所有订阅这个频道的客户端。如下图:

redis之消息订阅发布

  • 订阅:通过 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

redis之消息订阅发布 可见,订阅终端只要监听到信道有发布者发布的消息,就会马上被接收到。如果熟悉消息中间件的小伙伴们应该很容易理解发布、订阅消息。

  • (二)模式匹配

订阅多个,通配符*:

终端1:订阅名称以channel_*匹配的频道:

PSUBSCRIBE channel_* 

终端2:向频道内发布消息:

PUBLISH channel_1 hellpchannel1
PUBLISH channel_2 hellpchannel2
PUBLISH channel3 hellpchannel3

redis之消息订阅发布

 可见,只有满足信道通配符的要求,才能正确地接收到消息。

四、总结

以上就是关于redis中消息订阅发布的简单说明,由于存在不支持消息持久化、客户端需要一直监听等一些缺点,实际项目中一般比较少使用redis作为消息发布订阅的解决方案,一般会选择例如rabbitmq、activeMQ等消息中间件来处理,功能比redis的更加强大。