首页 > 数据库 >Redis Stream 作为消息队列的详尽笔记

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

时间:2024-07-02 11:56:07浏览次数:20  
标签:消费 Stream 队列 Redis 消息 ID

概述
  • 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 适合轻量级消息队列解决方案,但需要注意其设计定位和高可用性问题。适用于数据量可控、业务模型简单的场景。

标签:消费,Stream,队列,Redis,消息,ID
From: https://blog.csdn.net/modelsetget/article/details/140122965

相关文章

  • 数组模拟队列
    829.模拟队列-AcWing题库#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'constintN=5e5+10;intq[N];inthh=0,tt=-1;//hh头tt尾signedmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);......
  • Redis配置文件详解
    在Redis中,Redis的根目录中有一个配置文件(redis.conf)。您可以通过RedisCONFIG命令获取和设置所有Redis配置。查看Redis配置句法CONFIGGET命令的基本语法:redis127.0.0.1:6379>CONFIGGETCONFIG_SETTING_NAME查看日志等级的配置redis127.0.0.1:6379>CONFIGGETlog......
  • python中对于redis依赖的一些版本记录
    一、redis不同版本对于集群和单节点的区别:1.在redis版本高于等于4.1.0支持集群方式链接(官网实例:https://redis-py.readthedocs.io/en/stable/clustering.html)推荐只使用redis官方依赖该与4.1.0的稳定版本进行支持 2.如果使用redis-py-cluster,进行对redis集群的连接,安装依赖时......
  • Redis 搜索日期范围内的查询
    目录Redis搜索日期范围内的查询1.存储日期数据2.查询日期范围3.使用有序集合总结Redis搜索日期范围内的查询Redis是一种快速、高效的数据存储和检索工具,常用于缓存和实时数据处理。虽然Redis设计并不专注于日期范围查询,但可以通过一些技巧实现该功能。本文将介绍......
  • 代码随想录算法训练营第九天|232.用栈实现队列、225.用队列实现栈、 20.有效的括号、1
    文章目录232.用栈实现队列思路--直接模拟225.用队列实现栈解法一、两个队列模拟解法二、一个队列模拟20.有效的括号栈模拟1047.删除字符串中的所有相邻重复项解法一、栈解法二、双指针232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目描述:请你仅......
  • Reactive Streams介绍及应用分析
    ReactiveStreams的介绍与应用分析如下:一、ReactiveStreams基本知识ReactiveStreams是一种基于异步流处理的标准化规范,旨在使流处理更加可靠、高效和响应式。其核心思想是让发布者(Publisher)和订阅者(Subscriber)之间进行异步流处理,以实现非阻塞的响应式应用程序。基本特性......
  • 十一、Redis持久化之AOF
    文章目录一、AOF(AppendOnlyFile)1.1是什么1.2AOF持久化流程1.3AOF默认不开启1.4AOF和RDB同时开启,redis听谁的?1.5AOF启动/修复/恢复1.6AOF同步频率设置1.7Rewrite压缩1.8优势1.9劣势1.10小总结二、总结(Whichone)2.1用哪个好2.2官网建议上一篇十、Red......
  • 十、Redis持久化之RDB
    文章目录一、总体介绍二、RDB(RedisDataBase)2.1官网介绍2.2RDB是什么2.3备份是如何执行的2.4Fork2.5RDB持久化流程2.6dump.rdb文件2.7配置位置2.8如何触发RDB快照;保持策略2.8.1配置文件中默认的快照配置2.8.2命令saveVSbgsave2.8.3flushall命令2.8.4SNAPSHO......
  • 【Redis持久化】RDB、AOF介绍和使用
    RDB、AOF介绍和使用引言ROB介绍配置指令介绍使用指令:dump文件修复指令快照禁用AOF工作流程:文件重写:三种写回策略:混合使用引言持久化的目的,其实就是在Redis重启或者中途崩溃的时候能够依靠自身恢复数据,而不需要再次访问MySQL数据库,重新取得数据,增加MySQL的工作量。在此有两种方法,R......
  • 消息队列面试题----基础篇
    ##1、为什么要用MQ?MQ有哪些使用场景?###什么是消息队列消息队列是一种异步的通信方式,用于在分布式系统中管理消息传递。消息队列采用了生产者-消费者模型,生产者将消息发送到队列中,而消费者则从队列中接收消息。###为什么要使用消息队列其实就是问问你消息队列都有哪些使......