Redis-----Stream

消息队列

  • 一种新的数据类型

  • 是一个具有发布、订阅消息功能的组件

  • 优点:
    性能高、内存利用率高;
    提供了消息的持久化存储;
    主从复制功能,从而解决了网络断开、redis宕机情况下,消息丢失的问题,即时重启redis,存储的内容还在;

  • Stream队列主要由四部分组成:消息本身、生产者、消费者、消费组;
    1)消费流程
    一个队列里有很多个消费组,每个组内包含了多个消费者,组内的消费者们存在竞争的关系。当某个消费者消费了一条消息时,同组的消费者,不会再去消费这条消息;每当消费完一条消息,消费组的游标就会向前移动一位,组内的消费者再去争抢下一条消息。
    2)相关名词介绍
    (1)stream direction:是一个将所有的消息串联起来的消息链,每个消息都有其对应的唯一标识符ID和消息内容
    (2)Consumer group:拥有唯一的组名,一个消息链stream direction上可以由多个消息组,消息组通过游标------>last_delivered_id在消息链上读取消息,任意一个消费者读取了消息都会使游标往前移动一位;
    (3)pending_ids:表示消费者的状态变量,它记录了已经被客户端读取的消息ID,但是这些消息并没有被客户端ACK,一旦ACK了,pending_ids开始减少。
    3)相关命令:
    - xadd mystream * username maomao age 10
    key:队列名称
    *是redis自动生成的id,自增且唯一
    消息记录以 field value的形式
    该命令的返回值是毫秒时间戳格式的字符串,如1610619132672-2:表示在该毫秒内产生的第二条消息。
    - xgroup create mystream ms1 0-0
    创建消费组ms1, 指定消息队列mystream---->key,并传递了起始消息的id 0-0---->目的是为了初始化游标
    - xgroup create mystream ms3 $
    $表示从尾部消费消息,只接受新消息

    4)消费消息----消费者读取消息
    通过xreadgroup使消费者消费消息,可以阻塞等待新消息,读到消息后,消息的id就会进到消费者的ple里面,客户端处理完毕消息后就会使用xack命令通知服务器,已处理完毕,该消息就会从ple里面移除。
    xreadgroup group ms1 c1 count 1 block 1000 streams mystream 1
    c1:消费者
    count 1:要读取得数量
    block 1000:表示阻塞等待1000毫秒,如果没有消息来就返回nill,此时游标移动到了末尾
    1:是消息ID
    输出:消息记录
    xack mystream ms1 002
    将id为002的消息标记为已处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值