Pub/Sub

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis的Pub/Sub发布订阅,是Redis一步步完善消息队列功能的一个进步点,虽然现在没人用Pub/Sub做消息队列,但是它的思想和功能也是值得玩一下的,这个就是我写这篇文章的主要原因。

1、简介

李子捌把话说在前头,如果你是面试或者为了了解知识来学习这一知识点,我觉得是有必要的;但是如果你是作为公司的技术负责人或者项目技术选型来使用Redis的Pub/Sub做消息的发布订阅,如果你不是走投无路了,那么你可能值得斟酌一下。Redis的Pub/Sub发布订阅,是Redis一步步完善消息队列功能的一个进步点,虽然现在没人用Pub/Sub做消息队列,但是它的思想和功能也是值得玩一下的,这个就是我写这篇文章的主要原因。

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

  • pub -> publisher
  • sub -> subscriber

Redis客户端订阅一个频道非常简单,它可以订阅任意数量的频道。

如下图,Redis客户端订阅(subscriber)频道(channel)

如下图,当消息发送到客户端订阅的频道(channel)时,这个消息就会被订阅的所有未故障的客户端接接收到


2、实例演示

演示Redis的发布订阅,我们需要开启多个客户端,订阅频道(channel)。

2.1 普通订阅

如下我会启动4个客户端,第一个客户端用来发布消息,其他的用来订阅频道,接收消息。


客户端2、客户端3、客户端4同时订阅news和weather频道(channel)


客户端1向频道news/weather发布消息

此时可以看到三个客户端均接收客户端1向频道news/weather发布的消息


2.2 模式订阅

Redis为了方便同时订阅多个模式的频道,也有类似市面上常见的MQ中模式订阅功能(如Rabbit MQ中的topic),这个功能可以匹配符的方式进行订阅。

比如我需要订阅以fund.开头,任意字符结尾的频道,就可以使用如下的订阅方式

尝试向fund.nuoan发布消息

订阅了fund.*的客户端,成功接收到消息



3、Pub/Sub为什么被抛弃

关于Redis的Pub/Sub为什么被抛弃,最主要的原因是它无法持久化,没有实现持久化机制的Pub/Sub,无法做到消息的不丢失,在客户端宕机或者Redis服务宕机的情况下,都会导致消息丢失。

  • 客户端宕机,客户端无法接收消息
  • Redis服务宕机,没有客户端能连接上,肯定也无法接收到消息

大部分情况下,我们都不会用到Redis去做消息中间件,市面上成熟且好用的消息中间件非常多,如果真的需要使用Redis来做消息中间件,可以考虑Redis 5.0的新数据结构Stream,这个功能在Pub/Sub的基础上,实现了持久化机制,并且大力借鉴了kafka的设计原理,完善了Redis用于实现消息队列的不足之处。

关于stream的知识点,请查看我的Redis专栏!

目录
相关文章
|
域名解析 小程序 Linux
朋友圈超火的盲盒交友小程序,完整搭建教程及源码分享~(多图)
朋友圈超火的盲盒交友小程序,完整搭建教程及源码分享~(多图)
朋友圈超火的盲盒交友小程序,完整搭建教程及源码分享~(多图)
|
存储 文件存储 对象存储
|
前端开发 JavaScript UED
Web组件化的优势和劣势
Web 组件化的优势明显大于劣势,并且通过合理的规划、设计和技术选型,可以有效克服劣势带来的影响。随着技术的不断发展和经验的积累,Web 组件化将在前端开发中发挥越来越重要的作用。
344 55
|
11月前
|
运维 安全 数据安全/隐私保护
更安全、更丰富 、更兼容 Anolis OS 23.2 版本重磅上线
该版本不仅新增了许多实用功能,还修复了大量的已知问题和安全漏洞,显著提升了用户体验。
|
12月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习的果蔬识别系统实现
果蔬识别系统,主要开发语言为Python,基于TensorFlow搭建ResNet卷积神经网络算法模型,通过对12种常见的果蔬('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜')图像数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django框架搭建Web网页端可视化操作界面,以下为项目实现介绍。
213 4
基于Python深度学习的果蔬识别系统实现
|
11月前
|
XML API 开发者
探究获取亚马逊畅销榜API接口及实战应用
亚马逊MWS(商城网络服务)提供了一系列API接口,帮助开发者获取平台数据,其中畅销榜API尤为关键。通过注册开发者账号、创建应用并申请权限,可使用HTTP POST请求获取商品的销售排名、价格等信息。Python代码示例展示了如何构建和发送请求,并处理返回的XML或JSON数据。注意遵守亚马逊的频率限制、数据准确性和合规性要求,以确保安全合法地利用这些数据支持电商业务决策。
369 1
|
弹性计算 缓存 测试技术
阿里云ECS云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测
阿里云ECS云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测,2核4G服务器并发数性能测试,阿小云账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素
|
人工智能 机器人 API
AppFlow:将文心智能体加入你的社交群聊
通过阿里云AppFlow,只需简单配置,无需编写代码,即可将百度文心智能体接入钉钉群聊,为群聊添加一个专业的AI助手。本文以钉钉群聊为例,详细介绍了如何创建钉钉应用、AI卡片、配置AppFlow连接流以及创建钉钉机器人,最终实现AI助手在群聊中的应用。
533 9
|
消息中间件 存储 RocketMQ
自顶向下学习 RocketMQ(四):顺序消息
顺序消息是消息队列 RocketMQ 提供的一种对消息发送和消费顺序有严格要求的消息。对于一个指定的 Topic,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。
自顶向下学习 RocketMQ(四):顺序消息
|
存储 SQL Apache
Apache Doris 助力网易严选打造精细化运营 DMP 标签系统
Apache Doris 助力网易严选打造精细化运营 DMP 标签系统
673 0

热门文章

最新文章