redis数据类型 stream消息队列

Stream 是 Redis 5.0 版本 中新增的一种数据结构,它是一个高性能、持久化 的消息队列,可以用于实现消息的发布和订阅。Stream 可以看作是一个有序的消息队列,每个消息都有一个唯一的 ID,可以根据 ID 进行消息的查找、删除和确认。在 Stream 中,消息以键值对的形式存储,可以存储任意类型的数据。Stream 还支持多个消费者组,每个消费者组可以独立消费消息,避免消息重复消费。Stream 的引入使得 Redis 在消息队列领域更具竞争力,同时也为开发者提供了一种高效、可靠的消息处理方式。

1.Stream的结构设计

1.1 stream队列

可以通过XADD增加消息到对列中,结构是消息ID+消息内容(键值对 hash结构)

消息ID: 消息ID的形式是timestampInMillis-sequence,例如1527846880572-5,它表示当前的消息在毫米时间戳1527846880572时产生,并且是该毫秒内产生的第5条消息。消息ID可以由服务器自动生成,也可以由客户端自己指定,但是形式必须是整数-整数,而且必须是后面加入的消息的ID要大于前面的消息ID

1.2 stream消费者组

Consumer Group :消费组,使用 XGROUP CREATE 命令创建,一个消费组有多个消费者(Consumer), 这些消费者之间是竞争关系。

last_delivered_id :游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。

pending_ids :消费者(Consumer)的状态变量,作用是维护消费者的未确认的 id。 pending_ids 记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符)。如果客户端没有ack,这个变量里面的消息ID会越来越多,一旦某个消息被ack,它就开始减少。这个pending_ids变量在Redis官方被称之为PEL,也就是Pending Entries List,这是一个很核心的数据结构,它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理。

2.stream消息指令

-----------------------------队列相关指令-------------------------------------------

XADD - 添加消息到末尾

XTRIM - 对流进行修剪,限制长度

XDEL - 删除消息

XLEN - 获取流包含的元素数量,即消息长度

XRANGE - 获取消息列表,会自动过滤已经删除的消息

XREVRANGE - 反向获取消息列表,ID 从大到小

XREAD - 以阻塞或非阻塞方式获取消息列表

-----------------------------消费相关指令-------------------------------------------

XGROUP CREATE - 创建消费者组

XREADGROUP GROUP - 读取消费者组中的消息

XACK - 将消息标记为"已处理"

XGROUP SETID - 为消费者组设置新的最后递送消息ID

XGROUP DELCONSUMER - 删除消费者

XGROUP DESTROY - 删除消费者组

XPENDING - 显示待处理消息的相关信息

XCLAIM - 转移消息的归属权

----------------------------监控队列指令--------------------------------------------

XINFO - 查看流和消费者组的相关信息;

XINFO GROUPS - 打印消费者组的信息;

XINFO STREAM - 打印流信息

补充:

每个Pending的消息有4个属性:

  • 消息ID
  • 所属消费者
  • IDLE,已读取时长
  • delivery counter,消息被读取次数
相关推荐
tongyiixiaohuang4 分钟前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
大侠归来1 小时前
常用 MySQL 分库分表方案详解
数据库·mysql
Flynn Liang1 小时前
内存/Redis/PGVector/Milvus/ES 怎么选?Spring AI VectorStore 抽象与向量库选型对照表
redis·elasticsearch·milvus·rag·springai·pgvector·向量库
kingx32 小时前
Windows Server 2008 应急加固实战:7 项入侵痕迹排查与修复
数据库·windows·提权·应急响应·加固
xiaogai_gai2 小时前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
用AI来创业吧3 小时前
企业官网上线前性能清单:首屏、图片、字体与缓存
缓存·能源·安全威胁分析
AlickLbc3 小时前
DM-V8数据库证书过期处理过程记录
数据库
l1t3 小时前
DeepSeek总结的五分钟测试:Ted Dunning 谈 DuckDB 为何让分析更轻松
数据库·sql·duckdb
hweiyu003 小时前
Redis命令:SUNIONSTORE
redis·缓存
超级新零售3 小时前
零售 SaaS 与本地部署,技术责任边界究竟怎么分?
数据库·零售