redis lpush rpop List消息队列实现

news2024/11/17 3:47:32

List 队列: 

生产者存入消息:
LPUSH queue2 msg1
LPUSH queue2 msg2
LPUSH queue2 msg3
消费者消费消息:
RPOP queue2
RPOP queue2
RPOP queue2

写个死循环消费:
while true:
 //没消息阻塞等待,3秒超时返回null,设置0时没消息一直浪费cpu;
msg = redis.brpop("queue2",3);

if(msg==null): continue

//处理消息
handleMsg(msg)


不支持重复消费 :消费者拉取消息后,这条消息就从 List 中删除了,无法被其它消费者再次消费,即不支持多个消费者消费同一批数据

消息丢失:消费者拉取到消息后,如果发生异常宕机,那这条消息就丢失了

  • 发布/订阅模型:Pub/Sub

发送消息:

2个监听消费者消息

生产者生产消息:

PUBLISH queue3 msg1

PUBLISH queue3 msg2

PUBLISH queue3 msg3

消费者消费消息:

SUBSCRIBE queue3




 Pub/Sub 还提供了「匹配订阅」模式,允许消费者根据一定规则,订阅「多个」自己感兴趣的队列。

PSUBSCRIBE queue.*

 生产者分别向 queue.p1 和 queue.p2 发布消息

PUBLISH queue.p1 msg1
PUBLISH queue.p2 msg2

这时再看消费者,它就可以接收到这 2 个生产者的消息了。

我们可以看到,Pub/Sub 最大的优势就是,支持多组生产者、消费者处理消息

除了第一个是优点之外,剩下的都是缺点

支持发布 / 订阅,支持多组生产者、消费者处理消息

  1. 消费者下线,数据会丢失
  2. 不支持数据持久化,Redis 宕机,数据也会丢失
  3. 消息堆积,缓冲区溢出,消费者会被强制踢下线,数据也会丢失
  4. Pub/Sub 在实际的应用场景中用得并不多

Stream队列

 

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

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

相关文章

JavaSE学习进阶day07_02 异常

第三章 异常 3.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况&#xff0…

Android---屏幕适配

为什么要适配 由于 Android 系统的开放性,任何用户、开发者、OEM 厂商、运营商都可以对 Android 进行定制,于是导致运行 Android 的设备多种多样,它们有着不同的屏幕尺寸和像素密度。尽管系统可以通过基本的缩放和调整大小功能使界面适应不同…

【LeetCode: 53. 最大子数组和 | 暴力递归=>记忆化搜索=>动态规划 | 分治法 】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

抽象类,内部类,匿名类

java学习第十天 抽象类 1.用abstract关键字来修饰一个类时,这个类就叫抽象类 访问修饰符 abstract 类名 { } 2.用abstract关键字来修饰一个方法时,这个方法就是抽象方法访问修饰符abstract返回类型方法名(参数列表);//没有方法体 3.抽象类的价值更多作用是在于设计,是设计者…

ROS学习第十四节——参数服务器控制小乌龟

1.使用命令修改参数服务器 单独使用命令启动小乌龟节点,不是用lanuch文件,不启动键盘控制节点 rosrun turtlesim turtlesim_node 使用命令打印参数服务器参数列表 rosparam list 修改小乌龟节点的背景色 rosparam set /turtlesim/background_b 自定…

网络安全:一次艰难的 WAF 绕过

0x00:前言 做之前没想过有这么难 0x01:后缀绕过 首先看一下 waf 咋工作的,当数据包匹配到 waf 规则后,数据包就会被丢弃掉,就像这样 waf 是拦截后缀的,首先 fuzz 一波换行 失败 多个等于号 失败 单双引号…

入门Pytorch时的一些报错

Anaconda是一个很好的可以管理python环境的工具,推荐大家结合pycharm使用。 我入门时是参照up我的土堆的Pytorch教程来安装学习的,其中也遇到了一些问题。 1. torch.cuda.is_available结果显示False import torch torch.cuda.is_available 用anacon…

4月17号软件资讯更新合集.....

CrateDB 5.3.0 发布,分布式 SQL 数据库 CrateDB 是一个分布式的 SQL 数据库,使得实时存储和分析大量的机器数据变得简单。CrateDB 提供了通常与 NoSQL 数据库相关的可扩展性和灵活性,最小的 CrateDB 集群可以轻松地每秒摄取数万条记录。这些…

通过Python的PIL库给图片添加文本水印

文章目录 前言一、PIL是什么?二、安装PIL三、查看PIL版本四、使用PIL库给图片添加文本水印1.引入库2.打开图片文件3.新建一个Draw对象4.设置水印文字、字体、大小5.设置水印颜色5.1通过名称设置颜色5.2通过RGB值设置颜色5.3通过RGBA值设置颜色5.4通过十六进制设置颜…

Word控件Spire.Doc 【脚注】字体(3):将Doc转换为PDF时如何使用卸载的字体

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

HttpServletRequest的介绍和方法以及代码实战

目录 HttpServletRequest HttpServletRequest 介绍 HttpServletRequest 常用方法 代码实战 HTML部分 Java部分 web.xml配置 请求转发 为什么需要请求转发 请求转发说明 请求转发原理示意图 代码实战 HTML部分 CheckServlet部分 ManageServlet 部分 xml部分 请求…

【Linux】进程的概念

文章目录 📖 前言1. 冯诺依曼体系结构1.1 内存存在的意义:1.2 程序加载到内存的意义:1.3 程序的预加载: 2. 认识进程2.1 如何理解管理:2.2 什么叫是进程:(初步理解) 3. 简单认识操作…

读SQL进阶教程笔记13_SQL中的分组和层级

1. 数据分组 1.1. SQL的语句中具有分组功能的是GROUP BY和PARTITION BY 1.1.1. 两者都有数学的理论基础 1.1.2. 都可以根据指定的列为表分组 1.1.3. 区别仅仅在于,GROUP BY在分组之后会把每个分组聚合成一行数据 1.1.4. GROUP BY的作用是将一个个元素划分成若干…

CentOS7误删自带python2或yum异常导致yum命令不可用的解决方法

yum命令不可用的解决方法 异常场景1原因验证解决方案让Python2与Python3共存 异常场景2原因解决方案卸载、删除残留文件下载系统版本对应的yum包 异常场景1 在执行yum命令时,系统无法找到 Python 解释器,因此无法运行 yum 命令,具体异常如下…

详解语义分割deeplabv3+模型的工业应用流程

来源:投稿 作者:某一个名字 编辑:学姐 导语 在工业视觉应用中,目标检测算法常用于特征的粗定位,而语义分割则在特征的精定位方面有着突出的表现。使用较多的语义分割模型主要有FCN、deeplab系列、unet等,根…

ASEMI代理ADI亚德诺AD8210YRZ-REEL7车规级芯片

编辑-Z AD8210YRZ-REEL7芯片参数: 型号:AD8210YRZ-REEL7 偏移电压(RTI):1.0mV 超温(RTI):1.8 mV 差分输入阻抗:2 kΩ 共模输入阻抗:5 MΩ 共模输入电压…

数据离奇丢失案件的侦破与思考

01 离奇的数据丢失案件 最近生产环境出了一起数据离奇丢失的案件,调查过程很曲折,几度进入死胡同。下面跟大家分享整个事件的来龙去脉。 1.1 数据丢失案件 8月初,用户批量导入了一批(300)委托人数据,导入…

完美解决丨SyntaxError: invalid syntax

样例 1.1. 不同编辑器 VSCode:点击查看PyCharm:点击查看 1.2. 不同版本 1.2.1. python2 与 python3 的差异 Python2 的 print 语句如下: python print Hello, World! Python3 的 print 语句如下: python print(Hello, World!) P…

超实用的 Linux 高级命令,程序员一定要懂

前言 在运维的坑里摸爬滚打好几年了,我还记得我刚开始的时候,我只会使用一些简单的命令,写脚本的时候,也是要多简单有多简单,所以有时候写出来的脚本又长又臭。 像一些高级点的命令,比如说 Xargs 命令、管…

前端登陆表单_内容非空验证_rules属性与validate方法

更多校验规则查看&#xff1a;ElementUI官网-form-attributes 表单内容 <!--3、通过rules属性传入约定的验证规则v-bind:model"dataForm"绑定data中的dataForm数据v-bind:rules"rules"绑定data中的rules属性&#xff0c;里面定义了要校验的属性及规则re…