当前位置: 首页 > ops >正文

#Redis黑马点评#(六)Redis当中的消息队列

目录

Redis当中的消息队列

一 基于List

二 基于PubSub

三 基于Stream

单消费模式

消费者组


Redis当中的消息队列

消息队列,字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色:

  • 消息队列:存储和管理消息,也称为消息代理。
  • 生产者:发送消息到消息队列。
  • 消费者:从消息队列获取消息并处理消息。

一 基于List

底层是队列queue的形式

实现方式

  • 生产者:使用 LPUSH 或 RPUSH 将消息写入队列。

  • 消费者:使用 RPOP 或 BLPOP(阻塞式弹出)从队列中读取消息。

优点

  1. 简单高效:性能高,适合简单场景。

  2. 阻塞模式:支持 BLPOP/BRPOP 避免轮询浪费资源。

  3. 持久化:结合 Redis 的持久化机制(RDB/AOF),消息可持久化。

缺点

  1. 消息可靠性不足:消息被 RPOP 后即从队列删除,若消费者处理失败,消息会丢失。

    • 改进方案:使用 RPOPLPUSH 将消息转移到“处理中队列”,处理完成后再删除。

  2. 不支持多消费者:一条消息只能被一个消费者消费。

二 基于PubSub

原理
Redis 的发布订阅(PubSub)模式支持消息的 广播机制,生产者发布消息,所有订阅该频道的消费者都会收到消息。

实现方式

  • 生产者:通过 PUBLISH 向频道发送消息。

  • 消费者:通过 SUBSCRIBE 订阅频道,或 PSUBSCRIBE 订阅模式匹配的频道。

优点

  1. 实时广播:支持一对多消息分发。

  2. 轻量级:实现简单,无需维护消息存储。

缺点

  1. 消息不可靠:无持久化机制,若消费者不在线,消息会丢失。

  2. 无消息堆积能力:无法缓存历史消息。

  3. 不支持消费者组:无法实现负载均衡。

三 基于Stream

原理
Redis 5.0 引入的 Stream 数据结构,提供类似 Kafka 的 持久化日志队列 功能,支持消费者组、消息确认、消息回溯等高级特性。

常用命令

命令作用示例
XADD添加消息XADD mystream * field1 value1 field2 value2
XREAD读取消息XREAD COUNT 2 STREAMS mystream 0
XRANGE按范围查询消息XRANGE mystream - +(全部消息)
XGROUP管理消费者组XGROUP CREATE mystream mygroup 0
XACK确认消息处理完成XACK mystream mygroup 1526919030474-0
XCLAIM重新分配未确认的消息XCLAIM mystream mygroup consumer2 3600000 1526919030474-0

单消费模式

添加消息

读取消息

消费者组

概念:将多个消费者划分到一个组当中,监听同一个队列。

实现步骤:

1 创建消费者组

ID代表从队列的什么地方开始,如果队列当中原始的消息你不想获取你就可使用$符实现对最新的消息进行读取,如果你还需要获取就是用0从队列的第一个消息获取

2 消费者读取消息

0可以获取在pending-List未被确认的消息

一个组内一个进度,1被a读到,那b再接着读就会读到2。

读取消息后还需要确认,这些被读取到的内容还在Pending-List当中,读了就进pending list,然后没xack确认就一直呆在pending-list

3 确认消息

4 其他常见命令

http://www.xdnf.cn/news/7061.html

相关文章:

  • 从0到1吃透卷积神经网络(CNN):原理与实战全解析
  • Java基于数组的阻塞队列实现详解
  • Qt音视频开发过程中一个疑难杂症的解决方法/ffmpeg中采集本地音频设备无法触发超时回调
  • 健康生活:养生实用指南
  • 浅谈无服务器WebSocket的优势
  • 什么是open BMC?
  • Spring AI Alibaba集成阿里云百炼大模型
  • 异常日志规范
  • 低功耗模式介绍
  • Java配置文件处理工具全解析
  • 人工智能赋能产业升级:AI在智能制造、智慧城市等领域的应用实践
  • 何首乌基因组-文献精读131
  • 代码上传gitte仓库
  • 【C语言练习】048. 使用递归进行树的遍历
  • 【软考 8T(n / 2)+n^2的时间复杂度如何计算?】
  • C++(21):fstream的读取和写入
  • DeepSeek系列核心技术与贡献总结
  • 生产级编排AI工作流套件:Flyte全面使用指南 — Data input/output
  • 互联网大厂Java面试:从基础到复杂场景的技术挑战
  • 二:操作系统之进程概念
  • Unity学习总结篇(1)关于各种坐标系
  • 信息学奥赛一本通1012:计算多项式的值
  • Spring-Beans的生命周期的介绍
  • python3.13版本降为3.12
  • 基于STM32F103与Marvell88W8686的WIFI无线监控视频传输系统研发(论文)
  • 生成树的保护机制
  • 【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案
  • 院校机试刷题第六天:1134矩阵翻转、1052学生成绩管理、1409对称矩阵
  • AI驱动的研发流程:定义高度专业和系统化的规划基准
  • 软件架构设计--期末复习