Redis的Pub/Sub实现了发布/订阅消息范式,发布者将消息发布到不同的频道,订阅者订阅感兴趣的频道消息,而不需要关心是谁在发布。这种发布者和订阅者的解耦合方式可以极大的扩展的扩展性网络拓扑。
为了订阅foo和bar,客户端发出一个订阅的频道名称:

SUBSCRIBE foo bar

其他客户端发到这个频道的消息将会被推送到所有订阅该频道的客户端。
客户端订阅一个或多个频道而不必发出命令,尽管他能订阅和取消订阅其他频道。订阅和取消订阅的响应被封装在发送的消息中,以便客户端只需要读一个连续的消息流,其中第一个元素表示消息类型。

推送消息的格式

消息格式包括三个元素 。
第一个元素是消息类型:

  • subscribe: 表示我们成功订阅到响应的第二个元素提供的频道。第三个参数代表我们现在订阅的频道的数量。
  • unsubscribe:表示我们成功取消订阅到响应的第二个元素提供的频道。第三个参数代表我们目前订阅的频道的数量。当最后一个参数是0的时候,我们不再订阅到任何频道。当我们在Pub/Sub以外状态,客户端可以发出任何redis命令。
  • message: 这是另外一个客户端发出的发布命令的结果。第二个元素是来源频道的名称,第三个参数是实际消息的内容。

数据库与作用域

发布/订阅与key所在空间没有关系,它不会受任何级别的干扰,包括不同数据库编码。 发布在db 10,订阅可以在db 1。 如果你需要区分某些频道,可以通过在频道名称前面加上所在环境的名称(例如:测试环境,演示环境,线上环境等)。

协议示例

SUBSCRIBE first second
*3
$9
subscribe
$5
first
:1
*3
$9
subscribe
$6
second
:2

此时,从另一个客户端我们发出关于频道名称为second的操作:

> PUBLISH second Hello

这是第一个客户端收到的:

*3
$7
message
$6
second
$5
Hello

现在客户端用没有任何参数的 UNSUBSCRIBE命令取消订阅所有频道:

UNSUBSCRIBE
*3
$11
unsubscribe
$6
second
:1
*3
$11
unsubscribe
$5
first
:0

模式匹配订阅

Redis 的Pub/Sub实现支持模式匹配。客户端可以订阅全风格的模式以便接收所有来自能匹配到给定模式的频道的消息。
比如:

PSUBSCRIBE news.*

将接收所有发到news.art.figurative, news.music.jazz等等的消息,所有模式都是有效的,所以支持多通配符。

PUNSUBSCRIBE news.*

将取消订阅匹配该模式的客户端,这个调用不影响其他订阅。
当作模式匹配结果的消息会以不同的格式发送:
消息类型是pmessage:这是另一客户端发出的PUBLISH命令的结果,匹配一个模式匹配订阅。第一个元素是原匹配的模式,第三个元素是原频道名称,最后一个元素是实际消息内容。
同样的,系统默认 SUBSCRIBE 和 UNSUBSCRIBE, PSUBSCRIBE 和 PUNSUBSCRIBE 命令在发送 psubscribe 和punsubscribe类型的消息时使用像subscribe 和 unsubscribe一样的消息格式。

同时匹配模式和频道订阅的消息

客户端可能多次接收一个消息,如果它订阅的多个模式匹配了同一个发布的消息,或者它订阅的模式和频道同时匹配到一个消息。就像下面的例子:

SUBSCRIBE foo
PSUBSCRIBE f*

上面的例子中,如果一个消息被发送到foo,客户端会接收到两条消息:一条message类型,一条pmessage类型。

模式匹配统计的意义

在 subscribe, unsubscribe, psubscribe 和 punsubscribe 消息类型中,最后一个参数是依然活跃的订阅数。 这个数字是客户端依然订阅的频道和模式的总数。只有当退订频道和模式的数量下降到0时客户端才会退出Pub/Sub状态。

Redis发布与订阅模式相关推荐

  1. Redis发布与订阅(pub/sub)

    Redis发布与订阅(pub/sub) 本文档翻译自: http://redis.io/topics/pubsub . SUBSCRIBE . UNSUBSCRIBE 和 PUBLISH 三个命令实现 ...

  2. 6. Redis 发布与订阅

    文章目录 6. Redis 发布与订阅 为什么需要发布.订阅 发布/订阅如何使用? :one:基于频道发布 SUBSCRIBE:频道订阅 PUBLISH:向频道发送消息 UNSUBSCRIBE:退订频 ...

  3. Redis发布和订阅

    一.什么是Redis发布和订阅 Redis的发布(pub)和订阅(sub)是一种消息通信模式.它包含有三个角色分别是:发送者.订阅者.频道. Redis客户端可以订阅多个任意的频道. Redis发布和 ...

  4. Redis 发布和订阅

    Redis 发布和订阅 什么是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息. Redis 客户端可以订阅任意数量 ...

  5. 知方可补不足~SQL2008中的发布与订阅模式~续

    上一回介绍了如何在sql2008中建立一个数据库的发布者,今天来说一下如何建立一个订阅者,其实订阅者也是一个数据库,而这个数据库是和发布者的数据结构相同的库,它们之间通过SQL代理进行数据上的同步. ...

  6. 【RabbitMQ】基础三:发布与订阅模式(Publish/Subscribe)

    [RabbitMQ]基础三:发布与订阅模式(Publish/Subscribe) 1. 订阅模式 2. 发布与订阅模式说明 3. 代码示例 3.1 生产者 3.2 消费者 3.3 测试 4. 总结 1 ...

  7. redis发布与订阅消息

    2019独角兽企业重金招聘Python工程师标准>>> Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客 ...

  8. Redis发布与订阅——PUBLISH SUBSCRIBE

    2019独角兽企业重金招聘Python工程师标准>>> Redis发布与订阅--PUBLISH  & SUBSCRIBE 一般来说,发布与订阅(又称pub/sub)的特点是 ...

  9. redis发布与订阅

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 以下实例演示了发布订阅是如何工作的.在我们实 ...

最新文章

  1. 周末不用过来了,好好休息吧_如何好好休息
  2. Seaborn使用lmplot函数可视化散点图并添加回归曲线以及回归线对应的置信区间(Scatter plot with regression line)
  3. 三星a60android9,三星A6058官方国行安卓9固件rom线刷升级包:CHM-A6058ZMU2BSC9
  4. linux查找设备所在分片,Linux设备驱动统一模型解析
  5. 【转载】Java 内存分配全面浅析
  6. android 程序的目录,Android应用程序目录
  7. CentOS被攻击的分析过程
  8. sqlplus terminators - Semicolumn (;), slash (/) and a blank line
  9. 基于隐私保护的安全多方计算区块链融合技术的智能合约
  10. 服务器里那个文件是地图的爆率,dnf这才是固伤职业最喜欢的地图,气息爆率是巨龙的4倍!...
  11. Tilera 64核处理器快速上手
  12. 真实骑手数据:73万大学毕业生在送外卖
  13. 计算机专业基础综合哪个最难,10个考研最难的专业!你的专业排第几?
  14. 最简单三级管振荡分析(自由多谐振荡器电路)
  15. 解密刷子是如何进行APP刷量的?
  16. 联想服务器bios设置u盘启动不了系统,U盘重装系统的时候按F12不能启动,会出现联想拯救者是什么原因?bios设置U盘启动了...
  17. Chrome谷歌浏览器屏蔽百度搜索右侧广告推荐方法
  18. 谈谈我对软件开发项目管理的理解
  19. Python 词云分析周杰伦新歌《说好不哭》
  20. 我找到了用 AI 去马赛克的办法……

热门文章

  1. 手机摄像头图像在电脑上显示-实现视频监控
  2. 国内SRC奖励计划下的漏洞奖励与现状
  3. c语言二次函数拟合,用一个简单2次函数拟合标准正态分布的研究
  4. 隐马尔科夫模型HMM(二) -- 估计问题
  5. 机器学习系列(3)_特征工程01数据预处理
  6. 王者荣耀历史重要更新时间轴(2015年10月-2020年10月)
  7. 都市侠盗第一季/全集Leverage迅雷下载
  8. Redis cache-aside模型-分布式锁等问题研究
  9. matlab叶片背景,基于Matlab的复杂背景下叶片图像提取方法
  10. 使用asp.net开发钉钉群机器人全过程