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

使用 redis 实现消息队列

    • 方案1: 使用list做消息队列
        • 问题1: 如何保证消息不丢失
        • 问题 2: 重复消费/幂等
    • 方案 2: zset实现消息队列
    • 方案 3: 发布/订阅(pub/sub)
        • 问题1: 如何保证消息不丢失
        • 问题 2: 重复消费/幂等
    • 方案 4: Stream 实现消息队列
        • 问题1: 如何保证消息不丢失
        • 问题 2: 重复消费/幂等

方案1: 使用list做消息队列

  • 生产消息: LPUSH
  • 消费消息: RPOP
问题1: 如何保证消息不丢失
  1. 生产者不丢失: 失败重试
  2. 消费者不丢失: POP同时储存到另一个(zset: score 为当前时间的时间戳)做临时备份,ACK 后删除临时备份的数据;定时将超时没有 ACK 的消息重新投入消息队列(做一个定时任务)
  3. redis 不丢失: 使用 kafka 类似的逻辑,集群所有从节(冗余节点)点写成功才算成功.
问题 2: 重复消费/幂等
  • 唯一 Id 做去重(消费者)

方案 2: zset实现消息队列

  • zset 与 list 的核心区别

    • 消费后消息不会自动在 zset 中删除,需要手动删除
    • 排序方式: list 是根据加入消息的先后顺序排的;而 zset 根据 score 进行排序的
  • zset 适合做延时消息队列(比如到一段时间消费的任务)

方案 3: 发布/订阅(pub/sub)

  • 生产: PUBLISH 命令
  • 消费(订阅): SUBSCRIBE 命令
问题1: 如何保证消息不丢失
  1. 生产者不丢失: 发送失败重试
  2. 消费者不丢失: 消费者没有接收到消息(网络问题/之前没有消费的消息)就会丢失,无法找回!
  3. redis 不丢失: 使用 kafka 类似的逻辑,集群所有从节(冗余节点)点写成功才算成功.
问题 2: 重复消费/幂等
  • 唯一 Id 做去重(消费者)

  • 发布/订阅的方式可以有多个消费者,多次消费; 但是有消息丢失的风险

方案 4: Stream 实现消息队列

  • 生产: XADD
  • 普通消费: XREAD
  • 消费者组消费:XREADGROUP GROUP

具体参考:https://www.runoob.com/redis/redis-stream.html

问题1: 如何保证消息不丢失
  1. 生产者不丢失: 失败重试
  2. 消费者不丢失: 有 ack 机制;在消费逻辑执行完成后再 ack,保证 “最少一次” 消费
问题 2: 重复消费/幂等
  • 生产的时候使用唯一 Id 作为消息的 key
  • 消费者使用唯一 Id 做去重

相关文章:

  • 【leetcode hot 100 70】爬楼梯
  • 万相2.1本地部署教程——阿里开源超强AI视频模型:物理模拟×中英双驱,定义AI生成新标杆!
  • almalinux 8 9 升级到指定版本
  • Ansible的使用2
  • 一周学会Pandas2 Python数据处理与分析-Pandas2二维数据结构-DataFrame
  • ruby超高级语法
  • Jenkins配置的JDK,Maven和Git
  • 一站式AIGC创作平台主要功能介绍及使用教程
  • C语言核心知识点整理:结构体对齐、预处理、文件操作与Makefile
  • GPT文生图模型新玩法
  • DFS和BFS的模版
  • Linux 基础入门操作 前言 VIM的基本操作 2
  • Java logback框架日志输出中文乱码的解决方案(windows)
  • 【Easylive】定时任务-每日数据统计和临时文件清理
  • JavaWeb 课堂笔记 —— 04 Ajax
  • 我提了一个 Androidx IssueTracker
  • [QMT量化交易小白入门]-四十二、五年年化收益率26%,当日未成交的下单,取消后重新委托
  • PHP开发效率提升利器:通义灵码在VSCode中的应用与技巧
  • Model Context Protocol(MCP)介绍
  • CPP杂项
  • 游客称在网红雪山勒多曼因峰需救援被开价2.8万,康定文旅:封闭整改
  • 中国证监会印发2025年度立法工作计划
  • 1450亿元!财政部拟发行2025年中央金融机构注资特别国债(二期)
  • 两部上戏学生作品亮相俄罗斯“国际大学生戏剧节”
  • 不主动上门检查,上海已制定14个细分领域“企业白名单”甄别规则
  • 我国外汇储备规模连续17个月稳定在3.2万亿美元以上