首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入剖析 Redis5.0 全新数据结构 Streams(消息队列的新选择)

来源:阿飞的博客 Redis 5.0 全新的数据类型:streams,官方把它定义为:以更抽象的方式建模日志的数据结构。...,给streams追加(append,前面提到过:streams主要是一个append only的数据结构)一个新的entry(和Java里的Map类似,Redis里的streams中的数据也称为entry...并且ID的值我们用特殊字符`$`表示,这个特殊字符表示我们只获取最新添加的消息。...需要注意的是,Redis的streams和消费者组使用Redis默认复制进行持久化和复制,因此:如果消息的持久性在您的应用程序中很重要,则必须将AOF与强fsync策略一起使用。...长度为0的streams 这是streams和其他redis数据类型的不同,其他数据类型,例如Lists,Sets等,如果所有元素都被删除,那么key也不存在。

2.1K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring认证中国教育管理中心-Spring Data Redis框架教程二

    原标题:Spring认证中国教育管理中心-Spring Data Redis框架教程二 10.11.Redis 流 Redis Streams 以抽象方法对日志数据结构进行建模。...通常,日志是仅附加的数据结构,从一开始就在随机位置或通过流式传输新消息使用。 在Redis 参考文档 中了解有关 Redis Streams 的更多信息。...虽然 Pub/Sub 依赖于瞬时消息的广播(即,如果您不听,就会错过一条消息),而 Redis Stream 使用持久的、仅附加的数据类型,该数据类型会保留消息,直到流被修剪为止。...Redis Streams 提供读取命令,允许从已知流内容内和流端之外的任意位置(随机访问)消费流以消费新的流记录。...消息侦听器容器/接收器是 MDP 和消息提供者之间的中介,负责注册接收消息、资源获取和释放、异常转换等。

    1.3K20

    Redis消息队列 | Stream

    其中包括: 生成消息ID, 消息确认, 分组消费等功能. Stream有一个消息链表, 将所有加入的消息都串联起来, 每个消息都有一个唯一的ID和对应的内容....,最小ID等信息; *|ID 消息ID,可以自定义或Redis 自动生成; 自定义生成时, 需要保证单调递增; 使用符号"*"表示由Redis生成; 按时间戳-序号规则生成, 其中时间戳是毫秒级的Redis...[COUNT count] 用于限定获取的消息数量 [BLOCK milliseconds] 阻塞模式下的超时时间, 默认为非阻塞模式; ID 指定信息ID开始读取; 0表示从第一条消息开始; 阻塞模式下...[COUNT count] 每次获取消息的数量; [BLOCK milliseconds] 阻塞模式和超时时间; [NOACK] 不需要确认消息, 适用于不怎么重要的可以丢失的消息; key [key...指定的消息 ID; > 指定读取所有未消费的消息, 其他值指定被挂起的消息; 查看当前Stream 消费组信息, 确认最后消费位置 127.0.0.1:6379> xinfo groups mystream

    1.4K30

    别再用 Redis List 实现消息队列了,Stream 专为队列而生

    List 是线性结构,想要查询指定数据需要遍历整个列表; Stream 是 Redis 5.0 引入的一种专门为消息队列设计的数据类型,Stream 是一个包含 0 个或者多个元素的有序队列,这些元素根据...同时提供了消息的持久化和主从复制机制,客户端可以访问任何时刻的数据,并且能记住每一个客户端的访问位置,从而保证消息不丢失。...Stream 的高可用是建立主从复制基础上的,它和其它数据结构的复制机制没有区别,也就是说在 Sentinel 和 Cluster 集群环境下 Stream 是可以支持高可用的。...它用来保证消息至少被客户端消费了一次。 消费组实现的消息队列主要涉及以下三个指令: XGROUP用于创建、销毁和管理消费者组。 XREADGROUP通过消费组从流中读取数据。...; 2) ~ 3)青龙门中所有消费者读取的消息最小和最大 ID; 查看 consumer1读取了哪些数据,使用以下命令: XPENDING bossStream 青龙门 - + 10 consumer1

    81910

    redis简单使用

    一、redis入门1、redis简介Redis是一个主要由Salvatore Sanfilippo(Antirez)开发的开源内存数据结构存储器,经常用作数据库、缓存以及消息代理等。...Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。...(2.05s)not connected>2、数据结构与应用2.1、字符串字符串(string)键是Redis最基本的键值对类型,这种类型的键值对会在数据库中把单独的一个键和单独的一个值关联起来,被关联的键和值既可以是普通的文字数据...我们可以将一个消费者组简单理解为一个从流中获取数据的特殊的消费者。它从流中获取数据,然后再服务于多个消费者,同时提供了如下的保证:1) 每条消息都提供给不同的消费者,不会将相同的消息传递给多个消费者。...Redis将该确认解释为:此消息已正确处理,可以从消费者组中移除。5) 消费者组跟踪所有当前挂起的消息,即已传递给消费者组的某个消费者但尚未确认为已处理的消息。

    1.9K20

    别再用 Redis List 实现消息队列了,Stream 专为队列而生

    List 是线性结构,想要查询指定数据需要遍历整个列表; Stream 是 Redis 5.0 引入的一种专门为消息队列设计的数据类型,Stream 是一个包含 0 个或者多个元素的有序队列,这些元素根据...同时提供了消息的持久化和主从复制机制,客户端可以访问任何时刻的数据,并且能记住每一个客户端的访问位置,从而保证消息不丢失。...通过将元素ID与时间进行关联,并强制要求新元素的ID必须大于旧元素的ID, Redis从逻辑上将流变成了一种只执行追加操作(append only)的数据结构。...这里只是开胃菜,通过 XREAD 读取的数据其实并没有被删除,当重新执行 XREAD COUNT 2 BLOCK 0 STREAMS 云岚宗 0-0 指令的时候又会重新读取到。...Stream 的高可用是建立主从复制基础上的,它和其它数据结构的复制机制没有区别,也就是说在 Sentinel 和 Cluster 集群环境下 Stream 是可以支持高可用的。

    1.1K30

    Redis(8)——发布订阅与Stream

    list 列表结构结合 lpush 和 rpop 来实现消息队列的功能,但是似乎很难实现实现 消息多播 的功能: 为了支持消息多播,Redis 不能再依赖于那 5 种基础的数据结构了,它单独使用了一个模块来支持消息多播...都和模式 wmyskxz.* 匹配,所以 Redis 此时会同样发送消息给订阅了 wmyskxz.* 这个模式的 Consumer 3 和关注了在这个模式下的另一个频道 wmyskxz.log 下的...PubSub 的缺点 尽管 Redis 实现了 PubSub 模式来达到了 多播消息队列 的目的,但在实际的消息队列的领域,几乎 找不到特别合适的场景,因为它的缺点十分明显: 没有 Ack 机制,也不保证数据的连续...不过后来在 2018 年 6 月,Redis 5.0 新增了 Stream 数据结构,这个功能给 Redis 带来了 持久化消息队列,从此 PubSub 作为消息队列的功能可以说是就消失了.. image...(例如在添加数据的高峰期间,你不得不长暂停来淘汰旧消息和添加新的消息) 另外使用 MAXLEN 选项的花销是很大的,Stream 为了节省内存空间,采用了一种特殊的结构表示,而这种结构的调整是需要额外的花销的

    1.4K30

    Redis Stream 实践

    stream 的特性使其适合做消息队列和时间序列存储。 下面通过实践来深入了解stream,由于内容较长,我也准备了PDF版本,文章底部有下载地址。 2....1234 和 temperature 19.8 返回值是新增元素的ID,由时间戳和递增数字构成 获取Stream中元素的数量: redis:6379> XLEN mystream (integer)...redis stream 提供了这种情况的处理办法,通过2个步骤来解决: 查出所有已传递但未确认的消息数据 变更这些数据的所有者 这样就可以让新的消费者来处理这些数据了。...,列出了每条数据的 ID、所有者、此条消息的闲置时间(毫秒)、此消息被传递的次数。...value 3 1532049877554-0 上面添加了3条数据,下面看一下stream 的长度和现在的内容: redis:6379> XLEN mystream (integer) 2 redis

    1.3K20

    Redis 新数据结构 - Streams

    为什么添加 Streams 数据流?...Stream 数据流的使用越来越多,Redis 的作者 antirez 也在积极思考,如何让 redis 能够很好的支持数据流的使用场景 antirez 认为 Redis 现有的数据结构都不能很好的处理数据流...client,并且 list 中的元素没有一个固定标识 (3)Pub/Sub 发布订阅适合一对多的场景,但元素是很快消失的,这样不符合某些场景的需求,例如需要保存历史数据的情况、连接断掉重连后需要重新获取消息的情况...groups antirez 希望 Redis streams 能在事件、消息型应用中发挥重要作用,尤其是在 time series 场景中 3....小结 Redis streams 将使 Redis 覆盖更多的使用场景,其中一个重要场景就是 time series,会在 4.0 系列版本中发布,大概是在年底,目前核心功能已经开发完成,有兴趣的话可以获取

    1.1K60

    Redis streams 作为一个纯数据结构

    实际上,这个数据结构的设计背景也是消息的生产和消费,但你应该认为Redis Streams只是更擅长做这样的事情。...流是一种很好的模型和"心理模型",它能帮助我们更好的设计系统,但是Redis Streams像其他Redis数据结构一样,它更加通用,可以用来处理更多不同的问题。...所以这篇博客我们会重点关注Redis Streams作为一种数据结构有哪些特性,而完全忽略它的阻塞操作、消费群和所有消息相关的内容。...这个ID不仅仅是entry的唯一标识,也和entry加入流的时间有关。XRANGE命令可以批量获取或获取单个数据项。...我们来看一下我为什么说Streams是一个强大的数据结构。 网球运动员 前几天我和一个最近在学习Redis的朋友一起建模一个应用程序:这是一个用来追踪当地网球场、球员和比赛的app。

    77130

    ⑨【Stream】Redis流是什么?怎么用?: Stream

    ) Redis 5.0 之前,实现消息队列的两种方案: 方案一:List实现 方案二:发布订阅(Pub/Sub) Redis 5.0 后: Redis Steam 是redis 5.0 新增的一种数据结构...Redis Stram可以用来实现消息队列,它支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加稳定和可靠 Stream 结构: Stream本质是一个消息链表...,将所有加入的消息都串起来,每个消息都有一个唯一的ID和对应的内容 Message Content : 消息内容 Consumer group :消费组,通过XGROUP CREATE命令创建,一个消费组中可以有多个消费者...xrange mystream - + ③ xrevrange 获取指定队列的消息列表 与xrange的区别在于,获取消息队列元素的方向是相反的,end在前,start在后 xrevrange key...ID作为最后一个ID,当前Stream中不存在大于当前最大ID的消息,因此此时返回nil xread count 2 streams mystream $ # 0-0代表从最小的ID开始获取Stream

    39910

    Spring Boot 中的响应式编程和 WebFlux 入门

    响应式编程 在计算机中,响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式。...Flux 表示的是包含 0 到 N 个元素的异步序列。在该序列中可以包含三种不同类型的消息通知:正常的包含元素的消息、序列结束的消息和序列出错的消息。...Reactive Streams 一种支持 背压 (Backpressure) 的 异步数据流处理标准,主流实现有 RxJava 和 Reactor,Spring WebFlux 集成的是 Reactor...值得注意的是:支持 reactive 编程的数据库只有 MongoDB, redis, Cassandra, Couchbase Spring Webflux Spring Boot 2.0 包括一个新的...以上便是 Spring Boot 集成 Webflux 最简单的 Demo ,后续我们继续研究 Webflux 的使用。 示例 全网最全的 Spring Boot 学习示例项目,击下方链接即可获取。

    3.6K20

    工具系列 | Redis Stream 类型的消息队列

    概述 Redis 5 新特性中,Streams 数据结构的引入,可以说它是在本次迭代中最大特性。...同时,stream 借鉴了 kafka 的消费组模型概念和设计,使消费消息处理上更加高效快速。本文就 Streams 数据结构中常用 API 进行分析。...Stream消息队列 消息 ID 的序列化生成 消息遍历 消息的阻塞和非阻塞读取 消息的分组消费 未完成消息的处理 消息队列监控 添加消息(生产消息) Streams 添加数据使用 XADD 指令进行添加...即使添加消息时,由于 Id 异常,也可以在 Redis 中存在以当前 Streams 的名称。Streams 中 Id 也可作为指针使用,因为它是一个有序的标记。...读取消息(消费消息) 在 Redis 的 PUB/SUB 中,我们是通过订阅来消费消息,在 Streams 数据结构中,同样也能实现同等功能,当没有新的消息时,可进行阻塞等待。

    1.4K10

    Redis进阶-Stream多播的可持久化的消息队列

    Redis5.0 新增了 Stream 数据结构,这个功能给 Redis 带来了持久化消息队列,从此 PubSub 可以消失了。...---- Stream简介 Redis5.0 最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的支持多播的可持久化的消息队列。...---- Stream特性 Redis Stream 的结构如上图所示,它有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容 消息是持久化的,Redis 重启后...---- Stream 的高可用 Stream 的高可用是建立主从复制基础上的,它和其它数据结构的复制机制没有区别,也就是说在 Sentinel 和 Cluster 集群环境下 Stream 是可以支持高可用的...不过鉴于 Redis 的指令复制是异步的,在 failover 发生时,Redis 可能会丢失极小部分数据,这点 Redis 的其它数据结构也是一样的。

    2.8K50

    redis灵魂拷问:如何使用stream实现消息队列

    redis5.0开始引入了stream这个数据结构,stream可以很好地用于消息队列,它支持消息持久化,同时可以记录消费者的位置,即使客户端断开重连,也不会丢失消息。...> 里面使用到的spring-data-redis版本:2.1.9.RELEASE 里面使用到的lettuce连接池版本:5.1.7.RELEASE 本文使用的redis客户端是...消息的消费有2种方式,XREAD和XREADGROUP: XREAD是消费组读取消息,我们看下面这个命令: XREAD COUNT 2 STREAMS mystream writers 0-0 0-0...在物联网场景中,有大规模的传感器数据需要采集,这些数据对实时性的要求高过了一致性,使用redis是一个很好的选择 总结 使用redis的stream可以实现简单的队列,跟rabbitmq等非常成熟的消息队列相比...redis读写速度快的特点对实时性要求高的场景还是一个不错的选择,但是如果对数据一致性要求很高,需要绕过。

    3.1K00
    领券