redis基于Stream类型实现消息队列,命令操作,术语概念,个人总结等



个人大白话总结

1 在Redis Stream中,即使消息被消费者确认(acknowledged, ACK),消息也不会自动从Stream数据结构中删除。这与Kafka或RabbitMQ等传统消息队列系统的做法不同,在那些系统中,一旦消息被消费并确认,通常会被从队列中移除以释放存储空间。

2 若一个Stream中有5条消息,并且存在两个消费者组,这两个消费者组可以各自独立地消费这些消息,即所有消息对于不同消费者组来说是“广播”的,这一点类似于Kafka中的逻辑,每个消费者组都会按照其自身的消费进度处理消息。

3 在同一个消费者组内部如果有两个消费者A和B,若A已消费了3条消息,则剩余的2条消息将可供B或其他消费者消费。这意味着同一个消费者组内的多个消费者之间遵循竞争消费模式(Competitive Consumer Pattern),确保消息仅被组内一个消费者消费一次

4 当消费者从Stream中读取消息并开始处理时,它们会在本地维护一个Pending(待处理)列表,并将接收到的消息存入其中。当消费者完成对某条消息的处理并成功提交确认(acknowledge, ACK)后,该条消息会在消费者本地的Pending列表中被移除或者被标记为已处理状态。这种设计确保了消息的有序消费、状态跟踪以及防止消息被重复消费,因为只有当消息被确认处理完成后,才会从本地Pending列表中清除,从而允许消费者获取并处理新的消息。


stream相关的命令使用

基于Redis的Stream类型的完美消息队列解决方案 - 知乎

Redis入门 - 数据类型:Stream详解_redis stream-CSDN博客 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis Stream 可以用作消息队列,其实现方式如下: 1. 创建一个 Stream,用于存储消息。可以使用 XADD 命令Stream 中添加消息,消息的格式为 key-value 形式,其中 key 表示消息 ID,value 表示消息内容。 ```redis XADD mystream * message "hello" ``` 2. 消费消息。可以使用 XREAD 命令Stream 中读取消息,可以指定读取的消息数量和读取的位置。如果 Stream 中没有消息,则可以使用 XREADBLOCK 命令进行阻塞读取,直到有消息到达为止。 ```redis XREAD COUNT 10 STREAMS mystream 0 ``` 3. 确认消息已经被消费。可以使用 XACK 命令确认消息已经被消费,避免消息被重复消费。 ```redis XACK mystream group1 message-id ``` 4. 使用消费者组。如果有多个消费者消费同一个 Stream,可以使用消费者组进行管理。可以使用 XGROUP CREATE 命令创建一个消费者组,使用 XREADGROUP 命令从组中读取消息,并使用 XACK 命令确认消息已经被消费。 ```redis XGROUP CREATE mystream group1 0 XREADGROUP GROUP group1 consumer1 COUNT 10 STREAMS mystream > XACK mystream group1 message-id ``` 使用 Redis Stream 实现消息队列的优点包括: 1. Redis Stream 可以支持高性能的消息队列,多个消费者可以并发消费消息,提高了消息处理的效率。 2. Redis Stream 支持消息确认和消费者组,可以保证消息不会重复消费,同时可以进行消费者的管理和协作。 3. Redis Stream 内部使用日志数据结构,支持高可靠性和高可扩展性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值