• 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 - 读取消费者组中的消息

     

  • 相关阅读:
    CentOS 使用httpd 配置局域网yum源
    重启tomcat-Tomcat服务器怎么重启?
    637. 二叉树的层平均值-深度优先遍历+层次遍历-力扣双百代码
    绝对值排序
    go 线程限制数量 --chatGPT
    飞天使-django创建一个初始项目过程
    强大博客搭建全过程(1)-hexo博客搭建保姆级教程
    Kubernetes学习大纲
    大学生端午节网页作业制作 学生端午节日网页设计模板 传统文化节日端午节静态网页成品代码下载 端午节日网页设计作品
    wx.request请求eggjs报invalid csrf token
  • 原文地址:https://blog.csdn.net/qq_32378713/article/details/126228001