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…

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…

【计算机图形学 | 基于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…

docker安装rocketMq5x以上的版本

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

【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…

「漏洞复现」时空智友ERP系统updater.uploadStudioFile 任意文件上传漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

谷歌开发者新号上架攻略:开发者实战经验分享

前段时间&#xff0c;不少开发者朋友们在纷纷在吐槽新账号没法上架成功。以前谷歌对新号是真的很严格&#xff0c;但现在情况似乎有所好转。 今天&#xff0c;和大家聊聊如何在新号成功上架上“快人一步”&#xff0c;以及怎样增加账号权重提高上架成功率。 首先&#xff0c;我…

Linux文件系统与设备文件

一、Linux文件操作 Linux的文件系统API主要涉及创建、打开、读写、定位、关闭文件 创建 int creat(const char *filename, mode_t mode);mode: 代表新建文件的存取权限&#xff0c;需要和umask相与才能确定最终权限(mode&umask)。 umask代表文件在创建时需要去掉的存取…

MySQL高级-索引-使用规则-SQL提示(use、ignore、force)

文章目录 1、查看表 tb_user2、展示索引3、为profession、age、status创建 联合索引4、查询 profession软件工程5、执行计划 profession软件工程6、创建profession单列索引7、再次执行计划 profession软件工程8、SQL提示8.1、use index(idx_user_pro)8.2、ignore index(idx_use…

最流行的文件同步软件

PanguFlow是一款免费的文件同步软件&#xff0c;他支持文件的全量同步、支持文件的增量同步、支持文件的实时备份&#xff0c;支持双向同步&#xff0c;支持三向同步甚至多向同步&#xff0c;支持无人值守运行。 PanguFlow数据同步软件下载地址https://pan.baidu.com/s/1GLjFR…