Redis Stream 作为消息队列的详尽笔记

概述
  • Redis Stream 是 Redis 5.0 版本引入的数据结构,用于消息传递。
基础概念
  1. 结构:消息链表,每个消息有唯一 ID 和内容。
  2. 命名:每个 Stream 有唯一名称,对应 Redis Key。
  3. 消费组(ConsumerGroup):
    • 可挂载多个消费组,需手动创建。
    • 每个组有游标 last_delivered_id,记录消费进度。
  4. 消费者(Consumer):
    • 消费组内可挂载多个消费者。
    • 并行读取消息,更新消费组游标。
    • 内部属性 pending_ids 记录未确认消息 ID。
核心命令
  1. XADD:添加消息到 Stream 末尾。
    • 使用 * 让 Redis 自动生成消息 ID。
    • 可指定 Stream 长度,如 MAXLEN
  2. XLEN:获取 Stream 长度。
  3. XRANGE:获取消息列表,自动过滤已删除消息。
  4. XREAD:阻塞/非阻塞方式获取消息。
    • 使用 BLOCK 选项实现阻塞读取。
  5. XGROUP CREATE:创建消费者组。
    • 支持从头或从尾部开始消费。
  6. XREADGROUP:消费组内读取消息。
  7. XACK:消息消费确认,提高可靠性。
  8. XPENDING:查看未确认消息 ID。
  9. XTRIM:限制 Stream 长度,修剪消息。
SpringBoot 集成
  1. 添加依赖 spring-boot-starter-data-redis
  2. 配置 yaml 文件。
  3. 配置 RedisTemplate
  4. 定义 Stream 监听器。
  5. 定义并启动 streamcontainer
  6. 发送消息,消费者打印日志。
Redis Stream 适用性分析
  • 优点
    • 实现发布订阅模型。
    • 消费独立,订阅组间互不影响。
    • 支持一对多通信。
    • 与 Kafka 类似,有消费者组和偏移量。
    • 解决了 Redis List 作为队列时缺乏 Ack 机制的问题。
  • 局限性
    • 定位为内存数据库,不适合大量消息堆积。
    • 高可用方案可能丢失消息(AOF 和主从复制异步)。
    • 适合轻量级消息队列,数据量可控,业务模型简单。
总结

Redis Stream 适合轻量级消息队列解决方案,但需要注意其设计定位和高可用性问题。适用于数据量可控、业务模型简单的场景。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值