Redis发布、订阅模式(Pub/Sub)详解

Redis发布、订阅模式(PUB-SUB)详解

在这里插入图片描述

Redis的发布订阅(Pub/Sub)机制是一种消息通信模式,用于消息的广播。它允许多个客户端订阅(Subscribe)特定的频道(Channel),并在消息发布者(Publisher)向频道发布消息时,所有订阅该频道的客户端都能接收到消息。

工作原理

  1. 通信方式

    • Redis的发布-订阅模式基于消息的发布与订阅。消息由发布者发布到频道(Channel),而订阅者则可以订阅一个或多个频道,接收发布者发送到这些频道的消息。
  2. 频道(Channel)

    • 频道是消息的通道,发布者将消息发送到特定的频道,订阅该频道的订阅者会接收到这些消息。频道在Redis中是一个由字符串标识的名字。
  3. 发布消息

    • 发布者通过向指定频道发送消息来发布消息。多个订阅者可以订阅同一个频道,发布者发送的消息将被所有订阅了该频道的订阅者接收。

在这里插入图片描述
4. 订阅消息

  • 订阅者通过执行订阅命令来订阅一个或多个频道。一旦订阅成功并且频道有消息发布,订阅者将接收到这些消息。

在这里插入图片描述

  1. 取消订阅
    • 订阅者可以随时取消对某个或所有频道的订阅,取消订阅后将不再接收该频道的消息。

使用方法

在这里插入图片描述

  1. 发布消息
    • 使用Redis的 PUBLISH 命令向指定的频道发布消息。
      PUBLISH channel message
      
      其中,channel 是频道的名称,message 是要发送的消息内容。

在这里插入图片描述

  1. 订阅频道

    • 使用Redis的 SUBSCRIBE 命令订阅一个或多个频道。

      SUBSCRIBE channel [channel ...]
      
    • Redis还支持模式订阅(Pattern Subscription),可以使用 PSUBSCRIBEPUNSUBSCRIBE 命令订阅和取消订阅模式。

    • 例如 PSUBSCRIBE news* 可以订阅所有以 news 开头的频道。

    • 订阅成功后,Redis客户端将进入订阅模式,等待接收频道发布的消息。

    • 返回值为当前订阅的频道数量。
      在这里插入图片描述

  2. 取消订阅

    • 使用Redis的 UNSUBSCRIBE 命令取消对一个或多个频道的订阅。
      UNSUBSCRIBE [channel [channel ...]]
      
      如果不指定频道名称,则取消所有频道的订阅。

在这里插入图片描述

Tips:

  1. 消息丢失
    • 如果订阅者在消息发布之前或之后才订阅或取消订阅某个频道,那么该订阅者可能会错过在它未订阅期间发布的消息。也就是说,只有在订阅者实时在线并且订阅了频道的情况下才能接收到消息。

在这里插入图片描述

在这里插入图片描述

  1. 无持久化
    • Redis的Pub/Sub模式不会持久化消息,也就是说,消息在发布后立即被传递给当前在线的订阅者,之后不会保存。如果订阅者断开连接或Redis服务器重启,已发布但未接收的消息将会丢失。

在这里插入图片描述
在这里插入图片描述

  1. 无确认机制
    • Pub/Sub模式中没有类似于消息队列中的确认机制,没有办法确保消息一定被所有订阅者成功处理。例如,如果某个订阅者在处理消息时崩溃,消息不会重新发送给该订阅者。

在这里插入图片描述

  1. 非事务性
    • 消息的发布和接收是非事务性的。发布者发布消息后,不会等待订阅者的应答,即便订阅者在消息发布后立即掉线,发布者也不会知道。

在这里插入图片描述

由于这些无保证性,Redis的Pub/Sub模式主要适用于那些对消息可靠性要求不高的应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker镜像拉去不了解决方案

原理&工具 使用海外的服务器拉去镜像,压缩为tar包,传输到本地在本地运行 服务器:这里我使用的是AWS的服务器,新用户注册免费使用1年(流量超了就不免费了,一般用不完,还有使用 Cloudflare …

【ARM CoreLink 系列 7.2 -- TZC-400 错误状态寄存器使用详细介绍】

文章目录 TZC-400 错误信息使用Fail address low registerFail address high registerFail control registerFail ID registerTZC-400 错误信息使用 Fail address low register 在 ARM TZC-400 设备中,每个过滤单元都有一个 fail_address_low_<x> 寄存器,其中 <x&g…

嵌入式MCU平台汇总

文章目录 1. 单片机&#xff08;MCU&#xff09; 2. 数字信号处理器&#xff08;DSP&#xff09; 3. ARM Cortex 系列 4. 超低功耗MCU 5. 物联网MCU&#xff08;IoT MCU&#xff09; 6. 开源架构MCU&#xff08;RISC-V&#xff09; 7. 可编程逻辑器件&#xff08;FPGA&a…

springCloudAlibaba常用的依赖和配置文件

下面为常用的依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactI…

5.How Fast Should You Be When Learning?(你应该用多快的速度学习? (二))

Are you failing to reach an ideal or you dont know what the ideal is? 你是否没有达到理想状态&#xff0c;或者不知道理想状态是什么? A lot of learing involves having a mental representation of what the ideal performance ought to be, a method or approach t…

【el-table 可实现分页勾选数据】

分页勾选数据 第一步第二步第三步 第一步 <el-tableref"table"size"small"style"width: 100%;":row-key"getRowKeys"selection-change"selectionChangeHandler">第二步 <el-table-columntype"selection"…

【计算机图形学 | 基于MFC三维图形开发】期末考试知识点汇总(下)

文章目录 视频教程第四章 二维变换与裁剪矩阵基础回顾二维几何变换之 平移二维几何变换之 比例二维几何变换之 旋转二维几何变换之 反射复合变换直线裁剪&#xff1a;Cohen-Sutherland 算法直线裁剪&#xff1a;中点分割算法直线裁剪&#xff1a;Liang-Barsky 算法多边形裁剪&a…

github主页这样优化,让人眼前一亮

我的主页&#xff08;一之十六&#xff09; 1. 创建与账户ID同名的仓库 注意&#xff1a;记得勾选Add a README file 2. markdown语法自定义README.md 3. 辅助工具 优秀profile&#xff1a;https://zzetao.github.io/awesome-github-profile/动态文字&#xff1a;https://r…

构建高效业财一体化管理体系

构建高效业财一体化管理体系 业财一体化战略意义 提升决策质量 强化数据支撑&#xff1a;通过整合业务与财务数据&#xff0c;为决策提供准确、实时的信息基础&#xff0c;确保分析的深度与广度。促进业务与财务协同&#xff1a;打破信息孤岛&#xff0c;实现业务流程与财务管…

python 压缩数据

requests 是 Python 中一个非常流行的 HTTP 库&#xff0c;用于发送各种 HTTP 请求。下面是一个使用 requests 库发送简单 GET 请求和 POST 请求的示例&#xff1a; 首先&#xff0c;确保你已经安装了 requests 库。如果还没有安装&#xff0c;可以使用 pip 进行安装&#xff…

WEB攻防【4】——JavaWeb项目/JWT身份攻击/组件安全/访问控制

一、知识点 1、Javaweb常见安全及代码逻辑 Javaweb的架构&#xff1a; 如何通过包查找到文件&#xff0c;通过URL对应源码的文件&#xff0c;或者通过源码文件对应URL地址。 2、目录遍历&身份验证&逻辑&JWT Javaweb里面有身份认证的JWT的技术&#xff0c;pyth…

基于web的产品管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于web的产品管理系统,java项目。 ecli…

JavaScript中变量、数据类型、操作符和条件判断注意事项

一、变量名 定义规则&#xff1a; 变量名只能以字母和$_两个字符开头&#xff0c;后面可以包括数字。尽量不要使用其他Unicode字符&#xff0c;避免潜在问题。 最佳实践&#xff1a; 避免使用难以识别或有歧义的字符&#xff0c;以便代码更易读和维护。 二、数据类型 JavaScr…

docker安装rocketMq5x以上的版本

1.背景 安装RocketMQ 5.x以上的版本主要是因为新版本引入了许多性能优化、新功能以及对已有特性的增强&#xff0c;这些改进可以帮助提升消息队列系统的稳定性和效率。 1.性能提升&#xff1a;RocketMQ 5.x版本通常包括了对消息处理速度、吞吐量和延迟的优化&#xff0c;使得系…

IPython的%macro魔法命令:自动化和重用代码的利器

IPython是一个强大的交互式Python解释器&#xff0c;它提供了许多增强功能来提升开发效率&#xff0c;其中之一就是魔法命令&#xff08;magic commands&#xff09;。魔法命令以%开头&#xff0c;用于执行特定的操作&#xff0c;如控制IPython的行为或执行特殊的代码转换。%ma…

【linux 部署 springboot项目】

一、部署项目在linux上 注意&#xff1a; linux的版本是CentOS7.5&#xff0c;云服务器是阿里云。 1.1 用idea打包jar包 1.1.1 在pom.xml中加入打包依赖 <!-- 这个插件&#xff0c;可以将应用打包成一个可执行的jar包 --> <build><plugins><plugin>…

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的&#xff0c;为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的&#xff0c;为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率&#xff0c;但多进程、多线程都存在局限性。比如多进程通过时…

计网之IP

IP IP基本认识 不使用NAT时&#xff0c;源IP地址和目的IP地址不变&#xff0c;只要源MAC和目的MAC地址在变化 IP地址 D类是组播地址&#xff0c;E类是保留地址 无分类地址CIDR 解决直接分类的B类65536太多&#xff0c;C类256太少a.b.c.d/x的前x位属于网路号&#xff0c;剩…

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;框架是一种架构模式&#xff0c;用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构&#xff0c;提高代码的可维护性…

spring boot初始化的几个总结

spring intializr File->New->Project 注意&#xff1a;Spring Initializer中 Java版本选择模块已经不支持1.8了。 Spring Boot 3.x要求 Java最低版本为17&#xff0c; 最新的SpringBoot版本已经要求Java22了 所以&#xff0c;你可以升级Java版本&#xff0c;使用Spri…