本文已收录于专栏

《Redis精通系列》

上千人点赞收藏,全套Redis学习资料,大厂必备技能!


目录

1、简介

2、实例演示

2.1 普通订阅

2.2 模式订阅

3、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专栏!

Redis精通系列——Pub/Sub(发布订阅)相关推荐

  1. 硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?

    "65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?" "那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆 ...

  2. Redis精通系列——Stream

      本文已收录于专栏 <Redis精通系列> 上千人点赞收藏,全套Redis学习资料,大厂必备技能! 目录 1.简介 2.Stream内部探索 2.1 Stream 结构 2.2 四个唯一 ...

  3. Dapr微服务应用开发系列5:发布订阅构建块

    题记:这篇介绍发布订阅构建块,这是对事件驱动架构设计的一种实现落地. 注:对于"Building Blocks"这个词组的翻译,我之前使用了"构件块",现在和官 ...

  4. Redis精通系列——LRU算法详述(Least Recently Used - 最近最少使用)

      本文已收录于专栏 ❤️<Redis精通系列>❤️ 上千人点赞收藏,全套Redis学习资料,大厂必备技能! 目录 1.简介 2.maxmemory配置 3.内存达到maxmemory怎么 ...

  5. Redis第二话 -- Redis的高端操作(发布订阅、事务、LUA脚本)

    在Redis中还有一些用法是我们在工作中用的比较少的,本文统一整理一下. 1.发布订阅 在Redis里面除了List的阻塞队列可以实现消息队列以外,还有一种消息通信模式:发送者 (pub) 发送消息, ...

  6. Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)

    1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...

  7. java redis mq_redis之mq实现发布订阅模式

    概述 Redis不仅可作为缓存服务器,还可用作消息队列,本示例演示如何使用redis实现发布/订阅消息队列. 在Redis中,发布者没有将消息发送给特定订阅者的程序.相反,发布的消息被描述为通道,而不 ...

  8. php订阅系统,php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用

    一.场景介绍 最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知.经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用成本也比较低 ...

  9. redis java 发布订阅_Redis之发布订阅(Java)

    上一章节我们已经学会了Redis在Java项目里面最基本的应用,我们这一章节来讲一讲Redis里面一个非常重要的功能:发布订阅 发布订阅(Pub/Sub):目前广泛使用的通信模型,它采用事件作为基本的 ...

最新文章

  1. 周志华教授:AI领域如何做优秀研究并写高水平论文?
  2. 转载:malloc()与new()的区别详解
  3. ldconfig与 /etc/ld.so.conf
  4. 让感恩变成永久的记忆
  5. 关于ORA-04021解决办法(timeout occurred while waiting to lock object)
  6. 第六十五期:央行万字工作论文:区块链能做什么、不能做什么?
  7. 麦克风的喧响伪原创工具
  8. 千人千面之3D立体个人数据营销
  9. 【报告分享】2021-2022年中国人工智能创投数据报告.pdf(附下载链接)
  10. python print输出字符串报错
  11. java 开源im_开源IM项目-InChat登录接口设计与实现(基于Netty)
  12. 【物联网】NB-IoT和LoRa技术简介
  13. 星环科技TDH8.0使用必读2: 10种数据模型全支持 未来属于多模型大数据平台
  14. 评价——TOPSIS
  15. 武忠祥<高等数学辅导讲义> 第一章
  16. 小学教师计算机培训记录内容,中小学教师信息技术培训计划
  17. android gridview 拖动排序,android可拖动排序GridView实现
  18. HP笔记本电脑如何设置屏幕亮度
  19. 搜狗url自动推送工具 - 最新版 一直更新
  20. 男生必学,与女生聊天技巧

热门文章

  1. B03 - 006、scp
  2. Linux命令---scp
  3. 问题解决:网上导入git项目,各种报错
  4. IntentFilter
  5. 计算机毕业设计asp.net的大学生交友网站(源码+系统+mysql数据库+Lw文档)
  6. Hibernate映射文件生成器by LDDXFS
  7. Winform控件开发(1)——Label(史上最全)
  8. Unity2D瓦片地图tilemap出现瓦片间间隙问题解决
  9. falagard cegui
  10. cegui 自定义控件