【redis】redis发布/订阅模型

1、基本概念

  • Redis 发布/订阅模型(Pub/Sub, Publish/Subscribe)是 Redis 提供的一种消息通信模式,它允许发送者(发布者)发送消息到一个或多个频道(channel),而接收者(订阅者)可以订阅一个或多个频道,以便接收发送到这个频道的消息。
  • 发布者(Publisher):发送消息到频道的客户端。
  • 订阅者(Subscriber):接收频道消息的客户端。
  • 频道(Channel):一个字符串标识符,用于区分不同的消息类别或主题。

2、主要命令

  • SUBSCRIBE channel [channel ...]:订阅一个或多个频道。一旦有消息发送到被订阅的频道,订阅者就会收到该消息。
  • UNSUBSCRIBE [channel [channel ...]]:取消订阅一个或多个频道。如果没有指定频道,则取消订阅所有已订阅的频道。
  • PSUBSCRIBE pattern [pattern ...]:使用模式订阅。与SUBSCRIBE类似,但允许使用模式(如news.*)来匹配多个频道。
  • PUNSUBSCRIBE [pattern [pattern ...]]:取消使用模式订阅的频道。
  • PUBLISH channel message:向指定频道发送消息。所有订阅了该频道的客户端都会收到这个消息。

3、工作原理

  • 当客户端使用SUBSCRIBEPSUBSCRIBE命令订阅频道或模式时,Redis 会将客户端和频道或模式进行关联。
  • 当有客户端使用PUBLISH命令向某个频道发送消息时,Redis 会查找所有订阅了该频道的客户端,并将消息发送给它们。
  • 订阅者不需要一直在线等待消息。它们可以在任何时间订阅或取消订阅频道,并且只会在连接时接收发送到频道的消息。

4、应用场景

  • 实时通知:例如,在社交应用中,当某个用户发布了新的动态时,可以使用 Redis 发布/订阅模型来实时通知其他关注了该用户的用户。
  • 消息队列:虽然 Redis 本身不是专门为消息队列设计的,但其发布/订阅模型可以用于实现简单的消息队列系统。但请注意,由于 Redis 不提供消息确认机制,因此它可能不适合需要严格保证消息可靠性的场景。
  • 分布式系统中的事件驱动编程:在分布式系统中,不同的服务或组件之间可以通过 Redis 发布/订阅模型来交换事件和通知,以实现事件驱动的编程模式。

5、注意事项

  • 消息不持久化:Redis 发布/订阅模型中的消息是即时的,不会被持久化到磁盘上。一旦消息被发送,并且所有的订阅者都接收到了消息,那么这条消息就会从 Redis 中消失。
  • 无消息确认机制:与许多消息队列系统不同,Redis 发布/订阅模型没有消息确认机制。发送者无法知道订阅者是否成功接收到了消息。
  • 频道命名:频道的命名应该具有明确的语义,以便发送者和订阅者能够清晰地理解其用途。
  • 模式订阅:使用PSUBSCRIBEPUNSUBSCRIBE命令可以实现基于模式的订阅,这使得订阅者能够订阅多个具有相似名称的频道。
  • 性能考虑:在高并发场景下,大量的发布和订阅操作可能会对 Redis 服务器的性能产生影响。因此,在设计系统时需要权衡消息通信的需求和 Redis 服务器的性能。

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

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

相关文章

Graspnet复现笔记

前言 参考文章:Baseline model for "GraspNet-1Billion: A Large-Scale Benchmark for General Object Grasping" (CVPR 2020).[paper] [dataset] [API] [doc] 代码仓库:https://github.com/graspnet/graspnet-baseline 一、确定配置 Ubunt…

mysql8 锁表与解锁

方法1不行,就按方法2来执行; (一) 解锁方法1 连接mysql ,直接执行UNLOCK TABLES,细节如下: – 查询是否锁表 SHOW OPEN TABLES WHERE in_use >0 ; – 查询进程 show processlist ; – 查询到相对应的进程&#xf…

第26集《大乘起信论》

请大家打开《讲义》第五十五页,癸二、释发心。 在大乘的修学当中,我们成就的第一个功德是信成就发心。信成就发心前面一科,先讲到信心的成就,就是我们依止内外善根的熏习,成就所谓的菩萨种性,对于大乘菩萨…

固态硬盘好用,还是机械硬盘好用?

在当前的电脑存储设备市场中,固态硬盘(SSD)和机械硬盘(HDD)是两种最主流的选择。它们各有优缺点,适用于不同的使用场景和需求。本文将详细对比固态硬盘和机械硬盘的性能、价格、耐用性等方面,并…

C# 验证PDF数字签名的有效性

数字签名作为PDF文档中的重要安全机制,不仅能够验证文件的来源,还能确保文件内容在传输过程中未被篡改。然而,如何正确验证PDF文件的数字签名,是确保文件完整性和可信度的关键。本文将详细介绍如何使用免费.NET控件通过C#验证PDF签…

2024年特种设备作业人员考试题库及答案(流动式起重机Q2)

一、单选题 201、起重机制动器的制动带磨损超过原厚度的()时,应更换。 A.0.4 B.0.5 C.0.6 答案:B 202、履带式起重机自行转移时,每行驶()小时,应对行走机构进行检查和润滑。 …

js制作随机四位数验证码图片

<div class"lable lable2"><div class"l"><span>*</span>验证码</div><div class"r"><input type"number" name"vercode" placeholder"请输入验证码"></div>&l…

window系统openssl开发环境搭建(VS2017)

window系统openssl开发环境搭建 VS2017 一、下载openssl二、安装openssl三、openssl项目配置3.1 配置include文件3.2 配置openssl动态库四、编写openssl测试代码五、问题总结5.1 问题 一5.2 问题二一、下载openssl https://slproweb.com/products/Win32OpenSSL.html 根据自己…

2024年地球生态学与绿色发展国际会议 (EEGD 2024)

2024年地球生态学与绿色发展国际会议 (EEGD 2024) International Conference on Earth Ecology and Green Development in 2024 【重要信息】 大会地点&#xff1a;济南 大会官网&#xff1a;http://www.iceegd.com 投稿邮箱&#xff1a;iceegdsub-conf.com 【注意&#xff1a…

【docker】容器内配置环境变量

背景&#xff1a; 我要把下面的环境变量写到bash脚本里&#xff0c;起名叫environment_start.sh。 目的&#xff1a; 用于每次进入容器dev_into.sh的时候&#xff0c;让系统获取到环境变量。 先进入容器找个合适的位置写环境变量bash脚本&#xff0c;environment_start.sh …

当下环境下如何提升自己以拥抱未来的机会-程序员的自我提升

一、前言 看看今年的行情,无论是国内还是国外,仿佛都没有什么活力,经济下行压力越来越大,企业经营越来越困难。对于程序员的工作机会越来越少。这可能是现阶段乃至几年内的现象。现在是现金为王,拥有其他资产仿佛没有多大的增值空间,经济一片惨淡,消费不活跃,我看到的…

电脑重启后,不能远程连接服务器,该如何解决

文章目录 前言&#xff1a;系统情况&#xff1a;情况一&#xff1a;先检查网络连接情况情况二&#xff1a;检查服务器的 ssh 服务器转态情况三&#xff1a; 检查防火墙设置情况四&#xff1a;检查 SSH 配置文件情况五&#xff1a;其他可能性 前言&#xff1a; 电脑重启后&…

LLM RAG with Agent

题意&#xff1a;基于代理的LLM检索增强生成 问题背景&#xff1a; I was trying the application code in the link. 我正在尝试链接中的应用程序代码。 I am using the following Llang Chain version 我正在使用以下Llang Chain版本 langchain 0.0.327 langchain-commun…

云数据中心运维新纪元:让Linux服务器如虎添翼

文章目录 一、Linux系统管理的高级技巧1. 性能调优与监控&#xff1a;2. 自动化与脚本编写&#xff1a;3. 文件系统与存储管理&#xff1a; 二、服务器配置优化的策略1. 硬件选型与配置&#xff1a;2. 网络配置与优化&#xff1a;3. 应用部署与调优&#xff1a; 三、安全策略的…

极速升级:MacOS系统中Pip源的切换指南

极速升级&#xff1a;MacOS系统中Pip源的切换指南 在MacOS系统中&#xff0c;Python的包管理工具Pip是我们管理和安装Python库的得力助手。然而&#xff0c;默认的Pip源在国外&#xff0c;对于国内用户来说&#xff0c;访问速度可能较慢。因此&#xff0c;更换Pip源以提高下载…

工厂模式-实现

一.工厂模式 通过使用工厂模式&#xff0c;可以将对象的创建逻辑封装在一个工厂类中&#xff0c;而不是在客户端代码中直接实例化对象&#xff0c;这样可以提高代码的可维护性和可扩展性 Demo:以协议为例 1.抽象接口 public interface IProtocolGateWay{string ProtocolType{…

SMARTFORMS

page&#xff08;节点&#xff09;-> wondows(容器)

OpenCV 车牌检测

OpenCV 车牌检测 级联分类器算法流程车牌检测相关链接 级联分类器 假设我们需要识别汽车图像中车牌的位置&#xff0c;利用深度学习目标检测技术可以采取基于锚框的模型&#xff0c;但这需要在大量图像上训练模型。 但是&#xff0c;级联分类器可以作为预训练文件直接使用&…

go使用grpc编辑器 windows

先看最后效果&#xff1a; 当我执行 protoc --go_out. proto.proto 会生成proto.pb.go文件&#xff0c;主要存储的是封装好的结构体 执行 protoc --go-grpc_out. proto.proto 会生成对应的方法 那么现在提供解决方案&#xff1a; https://github.com/protocolbuffers…

MongoDB数据库 MQL (MongoDB Query Language)语句大全

基本命令 连接到 MongoDB mongo显示所有数据库 show dbs选择&#xff08;或创建&#xff09;数据库 db集合操作 显示当前数据库中的所有集合 show collections创建集合 db.createCollection("myCollection")删除集合 db.myCollection.drop()文档操作 插入文…