Redis 流技术

Redis 流技术

目录

Redis 流技术

What

Redis 流ID规则

Redis 消息结构

Demo

How


What

Redis Stream 是 Redis 5.0 版本新增加的数据结构。

Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有 个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户

端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

Redis 流ID规则

流(stream)中信息条目(一个 Stream 条目,由一个或多个键值对组成的)的 ID 必须是单调增的,为此,redis 采用时间戳+自增 id 这种方式 来保证,并且这两个数都是 64bit,不会有溢出问题,最后一点,redis 在增加信息条目时会检查当前 id 与上一条目的 id,自动纠正错误的情况, 一定要保证后面的 id 比前面大。

一个流中信息条目的 ID 必须是单调增的,这是流的基础

几个特殊的 ID:

- + :最小和最大可能出现的 Id

$ :当前流中最大的 id,可用于将要到来的信息

> :用于 XREADGROUP 命令中,表示迄今还没有发送给组中使用者的信息,会更新消费者组的最后 ID

* :用于 XADD 命令中,让系统自动生成 id

Redis 消息结构

Consumer Group:消费组,使用 XGROUP CREATE 命令创建,一个消费组有多个消费者(Consumer)。

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

pending_ids:消费者(Consumer)的状态变量,作用是维护消费者的未确认的 id。pending_ids 记录了当前已经被客户端读取的消息,但是还没 有 ack (Acknowledge character:确认字符)。

Demo

xadd mystream * id 1 name longge #生产消息

xdel mystream 1654521221581-0 #删除某条消息

xrange mystream - + #查看消息列表

XREAD count 1 streams mystream 0 #读取一条消息

xgroup create mystream group1 0 #创建消费者组

xreadgroup group group1 c1 count 1 streams mystream > #消费者读消息

xpending stream1 group1 - + 10 c1 #查看待确认的列表

XACK mystream group1 1654522733049-0 #确认消息

How

XADD - 添加消息到末尾

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

XDEL - 删除消息

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

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

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

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

XGROUP CREATE - 创建消费者组

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

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

XGROUP DELCONSUMER - 删除消费者

XGROUP DESTROY - 删除消费者组

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

XCLAIM - 转移消息的归属权

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

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ym影子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值