首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Redis 实现消息队列的三种模式

Redis 实现消息队列的三种模式

原创
作者头像
学习........
发布2026-04-24 12:17:31
发布2026-04-24 12:17:31
510
举报

针对 Java 后端开发中经常接触到的这三种 Redis 消息实现方式,我从设计模型、可靠性、功能特性三个维度为你总结了它们的核心区别:

Redis 消息传递方案核心对比

1. 核心架构与数据结构

特性

Pub/Sub (发布订阅)

List (列表)

Stream (流)

底层结构

字典 (Dict) + 链表

快速列表 (Quicklist)

基数树 (Radix Tree)

消息模型

广播模式 (1:N)

点对点模式 (1:1)

消费组模式 (N:M)

存储方式

不存储 (即时转发)

存储在 List 中

存储在 Stream 日志中

消息读取

被动接收 (Push)

主动拉取 (Pull/阻塞)

主动拉取 (Pull/消费组)


2. 功能特性深度对比

  • Pub/Sub:追求实时性
    • 优点:解耦极强,订阅者只需订阅频道即可,性能极高。
    • 缺点丢数据。如果消费者下线,期间发布的消息直接消失。没有消息堆积能力。
    • 场景:即时聊天、哨兵模式节点通信、配置中心更新同步。
  • List:追求简单可靠的任务分发
    • 优点:实现简单,支持 BLPOP 阻塞拉取。
    • 缺点不支持多组消费。一条消息被 A 消费者抢走,B 就看不到了。
    • 场景:简单的任务异步处理(如发邮件、清理缓存)。
  • Stream:追求 MQ 的全功能特性
    • 优点支持持久化支持消费组(Consumer Group)、支持消息回溯。它几乎拥有了专业 MQ(如 RocketMQ)的基础能力。
    • 缺点:相对于前两者,使用复杂度稍高。
    • 场景:对可靠性有要求的分布式消息系统。

3. 可靠性与 ACK 机制

这是面试中区分“高级开发”和“初级开发”的关键点:

  • 消息不丢失
    • Pub/Sub:无任何保障。
    • List:只要 Redis 不挂且消费者不中途宕机,数据在内存是安全的。
    • Stream:支持 AOF/RDB 持久化。
  • ACK(确认消费)
    • Pub/Sub / List不支持标准的 ACK(List 弹出即代表消费成功)。
    • Stream支持。消费后必须手动调用 XACK。如果消费者崩溃,消息会留在 PEL (Pending Entries List) 中,重启后可以重新处理。

总结建议

  • 需要简单广播且不在乎丢数据:选 Pub/Sub
  • 需要简单任务队列且只有一个业务逻辑处理:选 List
  • 需要分布式、高可靠、多业务组独立消费:选 Stream

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis 消息传递方案核心对比
    • 1. 核心架构与数据结构
    • 2. 功能特性深度对比
    • 3. 可靠性与 ACK 机制
    • 总结建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档