Redis5新特性-stream

2023-12-04 16:52
文章标签 特性 stream redis5

本文主要是介绍Redis5新特性-stream,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Stream队列

        Redis5.0 最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的 支持多播的可持久化的消息队列,作者声明 Redis Stream 地借鉴了 Kafka 的设计。

生产者

xadd 追加消息

xdel 删除消息,这里的删除仅仅是设置了标志位,不会实际删除消息。

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

xlen 消息长度

del 删除 Stream

1. 追加消息

xadd streamtest1 * name kk age 30

xadd:新增消息固定写法

streamtest1:队列名, 可任意

*:让redis自动生成id

2. 获取消息列表

xrange streamtest1 - +

xrange streamtest1 1701655814064-0 +

-表示最小值, +表示最大值, 也可以换成具体的消息id

3. 删除消息

只给消息打上标志位, 不会真删消息

xdel streamtest1 1701655821193-0

4. 删除整个stream

del streamtest1

消费者

单消费者 xread

1. 从头开始读

xread count 1 block 0 streams streamtest 0-0

count 1: 读取数量1

block 0: 阻塞

0-0:从头开始读

2. 从指定id开始读

xread count 1 block 0 streams streamtest 1701659324617-0

3. 从结尾开始读-阻塞到有消息

xread count 1 block 0 streams streamtest $

消费群组 xgroup

1. 创建消费者群组

xgroup create streamtest cg1 0-0

  • streamtest: 队列名
  • cg1: 群组名称, 可随意指定
  • 0-0: 从头开始读

xgroup create streamtest cg2 $

  • $: 从结尾开始读, 只接受新消息, 老消息全部忽略

2. 查看队列详情

xinfo stream streamtest

3. 查看群组详情

xinfo groups streamtest

4. 群组消费

xreadgroup GROUP cg1 c1 count 1 block 0 streams streamtest >

“GROUP”属于关键字,“cg1”是消费组名称,“c1”是消费者名称,“count 1”指明了消费数量,> 号表示从当前消费组的 last_delivered_id 后面开始读, 每当消费者读取一条消息,last_delivered_id 变量就会前进

5. 查看群组消费情况

xinfo consumers streamtest cg1

可以看到目前 c1 这个消费者有7条待 ACK 的消息,空闲了 329273 ms 没有读取消息。

6. ack确认消息

xack streamtest cg1 1701659319318-0 1701659324617-0

消息确认完, pending消息7条变成5条

Redis几种队列实现

1. 基于List的LPUSH+BRPOP的实现

优点: 实现简单, 消息延迟几乎为0

缺点: 空闲连接问题, ack问题.

如果线程一直阻塞在那里,Redis 客户端的连接就成了闲置连接,闲置过久, 服务器一般会主动断开连接,减少闲置资源占用,这个时候 blpop 和 brpop 或抛 出异常,所以在编写客户端消费者的时候要小心,如果捕获到异常需要重试

2. 基于Sorted-Set 的实现

        多用来实现延迟队列,也可以实现有序的普通的消息队列,但是消费者无法阻塞的获取消息,只能轮询,不允许重复消息。

3. PUB/SUB,订阅/发布模式

优点典型的广播模式,一个消息可以发布到多个消费者;多信道订阅,消费者可 以同时订阅多个信道,从而接收多类消息;消息即时发送,消息不用等待消费者 读取,消费者会自动接收到信道发布的消息。

缺点:

  1. 消息一旦发布, 若客户端不在线, 消息就会丢失;
  2. 不能保证每个消费者接收的时间是一致的;
  3. 若消费者客户端出现消息 积压,到一定程度,会被强制断开,导致消息意外丢失。通常发生在消息的生产 远大于消费速度时.

由此可见,Pub/Sub 模式不适合做消息存储,消息积压类的业务, 而是擅长处理广播,即时通讯,即时反馈的业务

4. 基于Stream类型的实现

        已经有了一个消息中间件的雏形,可以考虑在生产过程中使用,当然真正要在生产中应用,要做的事情还很多,比如消息队列的管理和监控需要花大力气去实现,而专业消息队列都已经自带或者存在着很好的第三方方案和插件

这篇关于Redis5新特性-stream的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/454191

相关文章

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Java之并行流(Parallel Stream)使用详解

《Java之并行流(ParallelStream)使用详解》Java并行流(ParallelStream)通过多线程并行处理集合数据,利用Fork/Join框架加速计算,适用于大规模数据集和计算密集... 目录Java并行流(Parallel Stream)1. 核心概念与原理2. 创建并行流的方式3. 适