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

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

PubSub 简介 我们从 上面的图 中可以看到,基于 list 结构的消息队列,是一种 Publisher 与 Consumer 点对点的强关联关系,Redis 为了消除这样的强关联,引入了另一种概念...PubSub 的缺点 尽管 Redis 实现了 PubSub 模式来达到了 多播消息队列 的目的,但在实际的消息队列的领域,几乎 找不到特别合适的场景,因为它的缺点十分明显: 没有 Ack 机制,也不保证数据的连续...每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。...所以我们可以使用一种带有 ~ 的特殊命令XADD mystream MAXLEN ~ 1000 * ... entry fields here ....../redis.io/topics/streams-intro Kafka vs.

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

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

streams这个数据类型对应有如下13个操作命令,所有命令都以"X"开头: XADD 用法:XADD key ID field string [field string …] 正如其名,这个命令就是用来添加的...key:的含义就是同一类型streams的名称; ID: streams中entry的唯一标识符,如果执行XADD命令时,传入星号(*),那么,ID会自动生成,且自动生成的ID会在执行XADD后返回,默认生成的...例如,某一streams的key命名为userInfo,且某个用户信息为{"username":"afei", "password":"123456"},那么执行XADD命令如下: 127.0.0.1:...XADD命令也支持显示指定ID,例如:XADD streamname 0-2 foo bar。 时钟回拨 需要注意的是,ID的时间戳部分是部署Redis服务器的本地时间,如果发生时钟回拨会怎么样?...XDEL 用法:XDEL key ID [ID …] 和XADD相反,这是命令用来从streams中删除若干个entry,并且会返回实际删除数,这个删除数可能和参数ID个数不等,因为某些ID表示的消息可能不存在

1.9K21

Redis 新数据结构 - Streams

为什么添加 Streams 数据流?...groups antirez 希望 Redis streams 能在事件、消息型应用中发挥重要作用,尤其是在 time series 场景中 3....命令实例 Streams 的几个主要特点 Streams 中的元素不是简单的字符串,而是由多组 field、value 构成的对象 范围查询方便而且高效 不同的 client 可以阻塞等待新的元素,而且可以指定从哪个...ID 开始 实例 > XADD mystream * sensor-id 1234 temperature 10.5 1506871964177.0 XADD 命令会把新元素添加到指定的 stream...小结 Redis streams 将使 Redis 覆盖更多的使用场景,其中一个重要场景就是 time series,会在 4.0 系列版本中发布,大概是在年底,目前核心功能已经开发完成,有兴趣的话可以获取

1K60

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

---- Pre Redis-13Redis发布订阅 中提到了PubSub的不足之处 。 PubSub 的生产者传递过来一个消息,Redis 会直接找到相应的消费者传递过去。...如果 Redis 停机重启,PubSub 的消息是不会持久化的,毕竟 Redis 宕机就相当于一个消费者都没有,所有的消息直接被丢弃。 正是因为 PubSub 有这些缺点,它几乎找不到合适的应用场景。...,内容还在 每个 Stream 都有唯一的名称,它就是 Redis 的 key,首次使用 xadd 指令追加消息时自动创建 每个 Stream 都可以挂多个消费组,每个消费组会有个游标last_delivered_id...---- 命令预览 Redis Version _ 5.0.3 ? ?...不过鉴于 Redis 的指令复制是异步的,在 failover 发生时,Redis 可能会丢失极小部分数据,这点 Redis 的其它数据结构也是一样的。

2.3K50

Redis】四大特殊的数据类型之 Stream

常用命令 Stream 消息队列操作命令XADD : 插入消息,保证有序,可以自动生成全局唯一 ID XDEL : 根据消息 ID 删除消息; DEL : 删除整个 Stream; # XADD key...# 命令最后的 $ 符号表示读取最新的消息 127.0.0.1:6379> XREAD BLOCK 10000 STREAMS mymq $ (nil) (10.01s) Stream 的基础方法,使用...Streams 会自动使用内部队列(也称为 PENDING List)留存消费组里每个消费者读取的消息,直到消费者使用 XACK 命令通知 Streams “消息已经处理完成”。...一旦消息 1665060633903-0 被 consumer2 处理了,consumer2 就可以使用 XACK 命令通知 Streams,然后这条消息就会被删除。.../XREAD 阻塞读取:XREAD block 重复消息处理:Stream 在使用 XADD 命令,会自动生成全局唯一 ID; 消息可靠性:内部使用 PENDING List 自动保存消息,使用 XPENDING

39830

使用Redis Stream来做消息队列和在Asp.Net Core中的实现

Redis Stream介绍 简单来说Redis Stream 就是想用Redis 做消息队列的最佳推荐; XADD--发布消息 XADD stream1 * name hei age 18 XADD..." 127.0.0.1:6379> XADD stream1 * name zhangshan age 19 "1631628890025-0" 其中的'*'表示让 Redis 自动生成唯一的消息...由此,引出 分组:GROUP GROUP--订阅分组消息(多端订阅) 同样先发布消息 XADD stream1 * name hei age 18 XADD stream1 * name zhangshan...age 19 127.0.0.1:6379> XADD stream1 * name hei age 18 "1631629080208-0" 127.0.0.1:6379> XADD stream1...stream1 > (nil) 同样 ‘0-0’ 表示从开头读取 '>' 表示读取最新,未被消费过的消息 (可以看到命令执行第二遍已经读不到新消息了) 分组 group2 127.0.0.1

1.9K20

Redis Streams介绍

至少在概念上是这样,因为Redis Streams是一种在内存中的抽象数据类型,所以它实现了更强大的操作,以克服日志文件本身的限制。...Streams 基础知识 为了理解Redis Streams是什么以及如何使用它们,我们将忽略所有高级功能,而是根据用于操作和访问它的命令来关注数据结构本身。...因此,Streams 在这方面与列表没有太大的不同,只是附加的API更复杂,更强大。 由于Stream是仅追加的数据结构,因此基本写入命令(称为XADD)会将新条目附加到指定的流中。...一个是XADD命令的MAXLEN选项。...正如您所看到的,基本上,在返回事件循环之前,所有调用XADD的客户端阻塞地等待消费消息,因此XADD的调用者应该同时收到Redis的回复,消费者将收到新的消息。

2K50

Redis Stream——作为消息队列的典型应用场景

发出消息时,只需使用发布命令( publish )命令即可。整个业务逻辑非常的清晰简单,这也是Redis强大和流行的重要原因——提供的功能和数据结构能尽可能提升开发者的开发效率。...创建频道 # 目前Redis还不支持创建空的stream,所以我们可以添加一个特殊消息, # 来创建一个新的stream(频道) ip:7000> xadd channel1 * create-channel...null 1528702126345-0 发送消息 # 发送一条消息,只需要使用xadd命令即可,我们可以给每条消息命名,顺便带上消息来源,方便业务逻辑处理。...ip:7000> xadd channel1 * msg1-tony "Hello everyone." 1528702503377-0 ip:7000> xadd channel1 * msg2-tony...BLOCK 100 STREAMS channel1 $ 1) 1) "channel1" 2) 1) 1) 1528703048021-0 2) 1) "msg1-tony"

1.9K20

redis】 属于redis的 “消息队列”:redis stream(浅析)

redis stream 使用示例 官网命令文档参考 添加消息 XADD命令可以发送消息到指定 Stream 消息流中(若不存在则创建)。...如果指定的ID参数是*字符,XADD命令将自动生成唯一的ID。自动生成ID时,第一部分是生成ID的Redis实例的Unix时间(以毫秒为单位)。第二部分只是序列号,用于区分在同一毫秒内生成的ID。...当用户为XADD指定显式ID时,最小有效ID为0-1,并且用户必须指定一个大于流中当前任何其他ID的ID,否则命令将失败并返回错误。...通常,Redis阻塞命令以秒为单位超时,但是此命令需要毫秒超时,即使服务器的超时分辨率通常接近0.1秒。...通常这个命令这样使用乎好一些: XREAD BLOCK 1000 STREAMS mystream $ $ 也是一个特殊ID,表示当前最大的消息ID。使用它可以要求redis读取最新的消息。

1.2K20
领券