Redis--发布订阅--原理/使用场景
原文网址:Redis--发布订阅--原理/使用场景_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Redis的发布订阅功能。
Redis发布订阅简述
Redis提供了基于“发布/订阅”模式的消息机制。此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel) 发布消息,订阅该频道的每个客户端都可以收到该消息,如图1所示。Redis提供了若干命令支持该功能,在实际应用开发时,能够为此类问题提供实现方法。
![](/assets/blank.gif)
使用场景
1. 业务解耦
聊天室、公告牌、服务之间利用消息解耦都可以使用发布订阅模式。
下面以简单的服务解耦进行说明。如图2所示,图中有两套业务,上面为视频管理系统,负责管理视频信息;下面为视频服务面向客户,用户可以通过各种客户端(手机、 浏览器、 接口) 获取到视频信息。
![](/assets/blank.gif)
假如视频管理员在视频管理系统中对视频信息进行了变更,希望及时通知给视频服务端,就可以采用发布订阅的模式,发布视频信息变化的消息到指定频道,视频服务订阅这个频道及时更新视频信息,通过这种方式可以有效解决两个业务的耦合性。
2. 框架应用
Redisson的分布式锁的实现就采用了发布订阅模式:获取锁时,若获取不成功则订阅释放锁的消息,在收到释放锁的消息前阻塞,收到释放锁的消息后再去循环获取锁。
3. 异步处理
可以采用Redis的发布订阅模式来实现异步处理,从而提高并发量。比如,秒杀功能就可以这样做:
- 秒杀之前,将产品的库存从数据库同步到Redis
- 秒杀时,通过lua脚本保证原子性
- 扣减库存
- 将订单数据通过Redis的发布订阅功能发布出去
- 返回1(表示成功)
- 订单数据的Redis订阅者处理订单数据
命令
Redis主要提供了发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅等命令。
1. 发布消息
命令
publish channel message
下面操作会向channel: sports频道发布一条消息“Tim won the championship”,返回结果为订阅者个数,因为此时没有订阅,所以返回结果为0:
127.0.0.1:6379> publish channel:sports "Tim won the championship"
(integer) 0
2.订阅消息
命令
subscribe channel [channel ...]
订阅者可以订阅一个或多个频道,下面操作为当前客户端订阅了channel:sports频道:
127.0.0.1:6379> subscribe channel:sports
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:sports"
3) (integer) 1
此时另一个客户端发布一条消息:
232127.0.0.1:6379> publish channel:sports "James lost the championship"
(integer) 1
当前订阅者客户端会收到如下消息:
127.0.0.1:6379> subscribe channel:sports
Reading messages... (press Ctrl-C to quit)
...
1) "message"
2) "channel:sports"
3) "James lost the championship"
如果有多个客户端同时订阅了channel:sports,整个过程如图3所示。
![](/assets/blank.gif)
有关订阅命令有两点需要注意:
- 客户端在执行订阅命令之后进入了订阅状态,只能接收subscribe、psubscribe、 unsubscribe、 punsubscribe的四个命令。
- 新开启的订阅客户端,无法收到该频道之前的消息,因为Redis不会对发布的消息进行持久化。
其他网址
《Redis开发与运维》=> 第3章 小功能大用处=> 3.7 发布订阅
Redisson客户端的锁 就是使用了发布/订阅
Redis--发布订阅--原理/使用场景相关推荐
- Redis 发布订阅原理以及springboo中RedisTemplate集成
一.Redis发布订阅原理 Redis的架构包括两个部分:Redis Client和Redis Server,即客户端和服务端.客户端负责向服务器端发送请求并接受来自服务器端的响应.服务器端负责处理客 ...
- redis 发布订阅以及使用场景
redis 发布订阅 发布订阅模式:一个发布者多个订阅者只要选择订阅这个发布者,发布者发布的数据都可以被订阅到,只有订阅者开始订阅之后,发布的数据才可以接收,也就是说历史数据不能接收 127.0.0. ...
- Redis发布订阅和应用场景
发布订阅-应用场景 Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布 ...
- Redis 发布订阅,小功能大用处,真没那么废材!
假设我们有这么一个业务场景,在网站下单支付以后,需要通知库存服务进行发货处理. 上面业务实现不难,我们只要让库存服务提供给相关的给口,下单支付之后只要调用库存服务即可. 后面如果又有新的业务,比如说积 ...
- Redis发布订阅模式实现原理
前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,很多时候我们可能不 ...
- google的api key调用次数是多少_Sprint Boot如何基于Redis发布订阅实现异步消息系统的同步调用?...
前言 在很多互联网应用系统中,请求处理异步化是提升系统性能一种常用的手段,而基于消息系统的异步处理由于具备高可靠性.高吞吐量的特点,因而在并发请求量比较高的互联网系统中被广泛应用.与此同时,这种方案也 ...
- Redis【10】-Redis发布订阅
简介 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息. Redis 客 户端可以订阅任意数量的频道. Redis 发布订阅 ( ...
- redis发布订阅与集群
本系列根据狂神说Redis写下笔记以供复习 B站狂神说Redis!:https://www.bilibili.com/video/BV1S54y1R7SB 发布订阅 Redis 发布订阅(pub/su ...
- Spring Boot 使用Redis发布订阅模式处理消息
Spring Boot 使用Redis发布订阅模式 1. Redis发布订阅模式 2. Spring Boot中订阅消息 2.1 Redis监听器容器配置 2.2 创建通道监听器 2.3 测试订阅功能 ...
最新文章
- Python 如何查看内存地址
- ios 贝塞尔曲线 颜色填充_PS的3D颜色深度映射到球体模拟天线
- 计算机编程免费ppt,计算机编程与C概述课件.ppt
- Web中Servlet
- socket 编程原理1
- mysql从库延时好高_部署MySQL延迟从库的几个好处
- 大数据学习笔记01:大数据概述
- 用循环输出以下数列:斐波那契数列(要输出20个数字)_Python学习之“为女朋友解释hash是个什么东西”
- Android操作系统手机遇冷 国外辉煌国内难现
- 操作系统系统用c语言写,用C语言写关于操作系统的一个问题。
- 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
- java 请求 https_JAVA后端请求HTTPS 的URL 遇到的问题
- linux内核之字符设备驱动图解
- 歌尔首次闪耀CES Asia,展示全面创新力量
- cf 1677 B. Tokitsukaze and Meeting
- 计量经济学及Stata应用 陈强 第七章异方差习题7.3
- 如何基于ffmpeg截取一段视频中的多个片段,并合并在一起,且不改变原来的效果?
- Detection in Crowded Scenes: One Proposal, Multiple Predictions(拥挤场景下的检测:一个提议,多个预测)
- python实现注册功能_python注册、登录,python注册登录,#1、实现注册功能#
- iOS Masonry使用
热门文章
- 搞机:使用docker-compose10分钟搞定redis,mongodb,mysql三大数据库
- SOC与MCU的区别是什么
- [附源码]Python计算机毕业设计SSM基于微信的基层党建信息系统(程序+LW)
- UX结合需求实例化进行设计开发
- 简单的Spring MVC入门程序,对于Spring mvc工作流程的理解,servlet标签和servlet-mapping 理解,视图解析器
- laravel配置路由会报404 Not Found
- Activity管理(三)
- 输入一个百分制成绩,输出成绩等级
- idea 使用 git 切换版本
- 卡片式步骤条样式实现