Redis发布订阅和应用场景

发布订阅-应用场景

Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。

这一功能最明显的用法就是构建实时消息系统,比如普通的即时聊天,群聊等功能。

订阅某个channel的信息

发布信息到某个channel

简单的应用场景的话, 以门户网站为例, 当编辑更新了某推荐板块的内容后:

CMS发布清除缓存的消息到channel (推送者推送消息)

门户网站的缓存系统通过channel收到清除缓存的消息 (订阅者收到消息),更新了推荐板块的缓存

Redis 发布订阅架构

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel

  • 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。
  • Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

Redis 发布订阅命令

PSUBSCRIBE pattern [pattern ...]

订阅一个或者多个符合模式匹配的频道

假设客户端同时订阅了某种模式和符合该模式的某个频道,那么发送给这个频道的消息将被客户端接收到两次,只不过这两条消息的类型不同,一个是message类型,一个是pmessage类型,但其内容相同。 

PUBSUB subcommand [argument [argument ...]]

返回由活跃频道组成的列表,即可以查询订阅与发布系统的状态

PUBLISH channel message 

发送消息到指定的频道

其返回值为接收到该消息的订阅者的数量

SUBSCRIBE channel [channel ...] 

订阅一个或多个频道

其返回值包括客户端订阅的频道,目前已订阅的频道数量,以及接收到的消息,其中subscribe表示已经成功订阅了某个频道

PUNSUBSCRIBE [pattern [pattern ...]] 

退订所有符合模式匹配的频道

UNSUBSCRIBE [channel [channel ...]] 

退订一个或多个频道

Redis采用UNSUBSCRIBE和PUNSUBSCRIBE命令取消订阅,其返回值与订阅类似。 
由于Redis的订阅操作是阻塞式的,因此一旦客户端订阅了某个频道或模式,就将会一直处于订阅状态直到退出。

在SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令中,

其返回值都包含了该客户端当前订阅的频道和模式的数量,当这个数量变为0时,该客户端会自动退出订阅状态。

 

Redis发布订阅与ActiveMQ的比较

1ActiveMQ支持多种消息协议,包括AMQPMQTTStomp等,并且支持JMS规范,但Redis没有提供对这些协议的支持

2ActiveMQ提供持久化功能,但Redis无法对消息持久化存储,一旦消息被发送,如果没有订阅者接收,那么消息就会丢失;

3ActiveMQ提供了消息传输保障,当客户端连接超时或事务回滚等情况发生时,消息会被重新发送给客户端,Redis没有提供消息传输保障

总之,ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的,

但是如果系统中已经有了Redis,并且需要基本的发布订阅功能,就没有必要再安装ActiveMQ了,

因为可能ActiveMQ提供的功能大部分都用不到,而Redis的发布订阅机制就能满足需求。

 

参考来源:https://www.cnblogs.com/yitudake/p/6747995.html

<p> <br /> </p> <p> <span style="font-size:14px;color:#E53333;">概要介绍</span><span style="font-size:14px;color:#E53333;">:</span><span></span> </p> <p> <span style="font-size:14px;">本课程主要是介绍并实战一款</span><span style="font-size:14px;">java</span><span style="font-size:14px;">中间件</span><span style="font-size:14px;">~redisson</span><span style="font-size:14px;">,介绍</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">相关的核心技术栈及其典型的应用场景,其中的应用场景就包括布隆过滤器、限流器、短信发送、实时</span><span style="font-size:14px;">/</span><span style="font-size:14px;">定时邮件发送、数据字典、分布式服务调度等等,在业界号称是在</span><span style="font-size:14px;">java</span><span style="font-size:14px;">项目里正确使用</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">的姿势。本课程的目标就在于带领各位小伙伴一起学习、攻克</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">,更好地巩固自己的核心竞争力,而至于跳槽涨薪,自然不在话下!</span><span style="font-size:14px;"> </span> </p> <p> <span style="font-size:14px;color:#E53333;">课程内容</span><span style="font-size:14px;color:#E53333;">:</span><span></span> </p> <p> <span style="font-size:14px;">说起</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">,可能大伙儿不是很熟悉,但如果说起</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">,想必肯定很多人都晓得。没错,这家伙字如其名,它就是架设在</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">基础上的一款综合性的、新型的中间件,号称是</span><span style="font-size:14px;">java</span><span style="font-size:14px;">企业级应用开发中正确使用</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">的姿势</span><span style="font-size:14px;">/</span><span style="font-size:14px;">客户端实例。</span><span></span> </p> <p> <span style="font-size:14px;">它是架设在</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">基础之上,但拥有的功能却远远多于原生</span><span style="font-size:14px;">Redis</span><span> </span><span style="font-size:14px;">所提供的,比如分布式对象、分布式集合体系、分布式锁以及分布式服务调度等一系列具有分布式特性的对象实例</span><span style="font-size:14px;">…</span> </p> <p> <span style="font-size:14px;">而这些东西</span><span style="font-size:14px;">debug</span><span style="font-size:14px;">将在本门课程进行淋漓尽致的介绍并实战,除此之外,我们将基于</span><span style="font-size:14px;">spring boot2.0</span><span style="font-size:14px;">搭建的多模块项目实战典型的应用场景:对象存储、数据字典、短信发送、实时</span><span style="font-size:14px;">/</span><span style="font-size:14px;">定时邮件发送、布隆过滤器、限流组件、分布式服务调度</span><span style="font-size:14px;">....</span><span style="font-size:14px;">课程大纲如下所示:</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161014439278.jpg" alt="" /> </p> <p> <span style="font-size:14px;">下面罗列一下比较典型的核心技术栈及其实际业务场景的实战,如下图所示为</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">基于订阅</span><span style="font-size:14px;">-</span><span style="font-size:14px;">发布模式的核心技术</span><span style="font-size:14px;">~</span><span style="font-size:14px;">主题</span><span style="font-size:14px;">Topic</span><span style="font-size:14px;">的实际业务场景,即实时发送邮件:</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161014551383.png" alt="" /> </p> <p> <span style="font-size:14px;">而下图则是基于“多值映射</span><span style="font-size:14px;">MultiMap</span><span style="font-size:14px;">”数据结构实战实现的关于“数据字典”的缓存管理:</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161015054368.png" alt="" /> </p> <p> <span style="font-size:14px;">除此之外,我们还讲解了可以与分布式服务调度中间件</span><span style="font-size:14px;">dubbo</span><span style="font-size:14px;">相媲美的功能:分布式远程服务调度,在课程中我们动手搭建了两个项目,用于分别充当“生产者”与“消费者”角色,最终通过</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">的“服务调度组件”实现服务与服务之间、接口与接口之间的调用!</span><span style="font-size:14px;"> </span> </p> <p> <span style="font-size:14px;color:#E53333;">课程收益</span><span style="font-size:14px;color:#E53333;">:</span><span></span> </p> <p> <span style="font-size:14px;">(</span><span style="font-size:14px;">1</span><span style="font-size:14px;">)认识并掌握</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">为何物、常见的几种典型数据结构</span><span style="font-size:14px;">-</span><span style="font-size:14px;">分布式对象、集合、服务的应用及其典型应用场景的实战;</span><span></span> </p> <p> <span style="font-size:14px;">(</span><span style="font-size:14px;">2</span><span style="font-size:14px;">)掌握如何基于</span><span style="font-size:14px;">spring boot2.0</span><span style="font-size:14px;">整合</span><span style="font-size:14px;">redisson</span><span style="font-size:14px;">搭建企业级多模块项目,并以此为奠基,实战企业级应用系统中常见的业务场景,巩固相应的技术栈!</span><span></span> </p> <p> <span style="font-size:14px;">(</span><span style="font-size:14px;">3</span><span style="font-size:14px;">)站在项目管理与技术精进的角度,掌握对于给定的功能模块进行业务流程图的绘制、分析、模块划分、代码实战与性能测试和改进,提高编码能力与其他软实力;</span><span></span> </p> <p> <span style="font-size:14px;">(</span><span style="font-size:14px;">4</span><span style="font-size:14px;">)对于</span><span style="font-size:14px;">Java</span><span style="font-size:14px;">微服务、分布式、</span><span style="font-size:14px;">spring boot</span><span style="font-size:14px;">精进者而言,学完本课程,不仅可以巩固提高中间件的实战能力,其典型的应用场景更有助于面试、助力相关知识点的扫盲! 如下图所示:</span><span></span> </p> <p style="text-align:center;"> <img src="https://img-bss.csdn.net/202002161015169044.png" alt="" /> </p> <p> <span style="font-size:14px;color:#E53333;">关键字</span><span style="font-size:14px;"><span style="color:#E53333;">:</span>Spring Boot,</span><span style="font-size:14px;">Redis,</span><span style="font-size:14px;">缓存穿透</span><span style="font-size:14px;">,</span><span style="font-size:14px;">缓存击穿</span><span style="font-size:14px;">,</span><span style="font-size:14px;">缓存雪崩,红包系统,</span><span style="font-size:14px;">Mybatis</span><span style="font-size:14px;">,高并发,多线程并发编程,发送邮件,列表</span><span style="font-size:14px;">List</span><span style="font-size:14px;">,集合</span><span style="font-size:14px;">Set</span><span style="font-size:14px;">,排行榜,有序集合</span><span style="font-size:14px;">SortedSet</span><span style="font-size:14px;">,哈希</span><span style="font-size:14px;">Hash ,</span><span style="font-size:14px;">进阶实战</span><span style="font-size:14px;">,</span><span style="font-size:14px;">面试,微服务、分布式</span> </p> <p> <span style="font-size:14px;color:#E53333;">适用人群</span><span style="font-size:14px;"><span style="color:#E53333;">:</span>redisson学习者</span><span style="font-size:14px;">,</span><span style="font-size:14px;">分布式中间件实战者,微服务学习者,</span><span style="font-size:14px;">java</span><span style="font-size:14px;">学习者</span><span style="font-size:14px;">,spring boot</span><span style="font-size:14px;">进阶实战者,</span><span style="font-size:14px;">redis</span><span style="font-size:14px;">进阶实战者</span> </p>
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值