原文网址:Redis--发布订阅--原理/使用场景_IT利刃出鞘的博客-CSDN博客

简介

本文介绍Redis的发布订阅功能。

Redis发布订阅简述

Redis提供了基于“发布/订阅”模式的消息机制。此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel) 发布消息,订阅该频道的每个客户端都可以收到该消息,如图1所示。Redis提供了若干命令支持该功能,在实际应用开发时,能够为此类问题提供实现方法。

图1 Redis发布订阅模型

使用场景

1. 业务解耦

聊天室、公告牌、服务之间利用消息解耦都可以使用发布订阅模式。

下面以简单的服务解耦进行说明。如图2所示,图中有两套业务,上面为视频管理系统,负责管理视频信息;下面为视频服务面向客户,用户可以通过各种客户端(手机、 浏览器、 接口) 获取到视频信息。

图2 发布订阅用于视频信息变化通知

假如视频管理员在视频管理系统中对视频信息进行了变更,希望及时通知给视频服务端,就可以采用发布订阅的模式,发布视频信息变化的消息到指定频道,视频服务订阅这个频道及时更新视频信息,通过这种方式可以有效解决两个业务的耦合性。

2. 框架应用

Redisson的分布式锁的实现就采用了发布订阅模式:获取锁时,若获取不成功则订阅释放锁的消息,在收到释放锁的消息前阻塞,收到释放锁的消息后再去循环获取锁。

3. 异步处理

可以采用Redis的发布订阅模式来实现异步处理,从而提高并发量。比如,秒杀功能就可以这样做:

  1. 秒杀之前,将产品的库存从数据库同步到Redis
  2. 秒杀时,通过lua脚本保证原子性
    1. 扣减库存
    2. 将订单数据通过Redis的发布订阅功能发布出去
    3. 返回1(表示成功)
  3. 订单数据的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所示。

标题

有关订阅命令有两点需要注意:

  1. 客户端在执行订阅命令之后进入了订阅状态,只能接收subscribe、psubscribe、 unsubscribe、 punsubscribe的四个命令。
  2. 新开启的订阅客户端,无法收到该频道之前的消息,因为Redis不会对发布的消息进行持久化。

其他网址

《Redis开发与运维》=> 第3章 小功能大用处=> 3.7 发布订阅
Redisson客户端的锁 就是使用了发布/订阅

Redis--发布订阅--原理/使用场景相关推荐

  1. Redis 发布订阅原理以及springboo中RedisTemplate集成

    一.Redis发布订阅原理 Redis的架构包括两个部分:Redis Client和Redis Server,即客户端和服务端.客户端负责向服务器端发送请求并接受来自服务器端的响应.服务器端负责处理客 ...

  2. redis 发布订阅以及使用场景

    redis 发布订阅 发布订阅模式:一个发布者多个订阅者只要选择订阅这个发布者,发布者发布的数据都可以被订阅到,只有订阅者开始订阅之后,发布的数据才可以接收,也就是说历史数据不能接收 127.0.0. ...

  3. Redis发布订阅和应用场景

    发布订阅-应用场景 Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布 ...

  4. Redis 发布订阅,小功能大用处,真没那么废材!

    假设我们有这么一个业务场景,在网站下单支付以后,需要通知库存服务进行发货处理. 上面业务实现不难,我们只要让库存服务提供给相关的给口,下单支付之后只要调用库存服务即可. 后面如果又有新的业务,比如说积 ...

  5. Redis发布订阅模式实现原理

    前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,很多时候我们可能不 ...

  6. google的api key调用次数是多少_Sprint Boot如何基于Redis发布订阅实现异步消息系统的同步调用?...

    前言 在很多互联网应用系统中,请求处理异步化是提升系统性能一种常用的手段,而基于消息系统的异步处理由于具备高可靠性.高吞吐量的特点,因而在并发请求量比较高的互联网系统中被广泛应用.与此同时,这种方案也 ...

  7. Redis【10】-Redis发布订阅

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

  8. redis发布订阅与集群

    本系列根据狂神说Redis写下笔记以供复习 B站狂神说Redis!:https://www.bilibili.com/video/BV1S54y1R7SB 发布订阅 Redis 发布订阅(pub/su ...

  9. Spring Boot 使用Redis发布订阅模式处理消息

    Spring Boot 使用Redis发布订阅模式 1. Redis发布订阅模式 2. Spring Boot中订阅消息 2.1 Redis监听器容器配置 2.2 创建通道监听器 2.3 测试订阅功能 ...

最新文章

  1. Python 如何查看内存地址
  2. ios 贝塞尔曲线 颜色填充_PS的3D颜色深度映射到球体模拟天线
  3. 计算机编程免费ppt,计算机编程与C概述课件.ppt
  4. Web中Servlet
  5. socket 编程原理1
  6. mysql从库延时好高_部署MySQL延迟从库的几个好处
  7. 大数据学习笔记01:大数据概述
  8. 用循环输出以下数列:斐波那契数列(要输出20个数字)_Python学习之“为女朋友解释hash是个什么东西”
  9. Android操作系统手机遇冷 国外辉煌国内难现
  10. 操作系统系统用c语言写,用C语言写关于操作系统的一个问题。
  11. 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
  12. java 请求 https_JAVA后端请求HTTPS 的URL 遇到的问题
  13. linux内核之字符设备驱动图解
  14. 歌尔首次闪耀CES Asia,展示全面创新力量
  15. cf 1677 B. Tokitsukaze and Meeting
  16. 计量经济学及Stata应用 陈强 第七章异方差习题7.3
  17. 如何基于ffmpeg截取一段视频中的多个片段,并合并在一起,且不改变原来的效果?
  18. Detection in Crowded Scenes: One Proposal, Multiple Predictions(拥挤场景下的检测:一个提议,多个预测)
  19. python实现注册功能_python注册、登录,python注册登录,#1、实现注册功能#
  20. iOS Masonry使用

热门文章

  1. 搞机:使用docker-compose10分钟搞定redis,mongodb,mysql三大数据库
  2. SOC与MCU的区别是什么
  3. [附源码]Python计算机毕业设计SSM基于微信的基层党建信息系统(程序+LW)
  4. UX结合需求实例化进行设计开发
  5. 简单的Spring MVC入门程序,对于Spring mvc工作流程的理解,servlet标签和servlet-mapping 理解,视图解析器
  6. laravel配置路由会报404 Not Found
  7. Activity管理(三)
  8. 输入一个百分制成绩,输出成绩等级
  9. idea 使用 git 切换版本
  10. 卡片式步骤条样式实现