《Spring Boot 3实战案例合集》现已囊括超过50篇精选实战文章,并且此合集承诺将永久持续更新,为您带来最前沿的技术资讯与实践经验。欢迎积极订阅,享受不断升级的知识盛宴!订阅用户将特别获赠合集内所有文章的最终版MD文档(详尽学习笔记),以及完整的项目源码,助您在学习道路上畅通无阻。
环境:SpringBoot3.2.5
1. 简介
Redis Stream 是一种数据结构,它类似于仅追加日志,但还实现了多种操作以克服典型仅追加日志的一些限制。这些操作包括 O(1) 时间的随机访问和复杂的消费策略(如消费者组)。可以使用 Stream 来实时记录和同步事件。Redis Stream 的用例示例包括:
事件溯源(例如,跟踪用户操作、点击等)
传感器监控(例如,记录现场设备的读数)
通知(例如,将每个用户的通知记录分别存储在不同的流中)
Redis 为每个流条目生成一个唯一的 ID。可以使用这些 ID 在以后检索它们关联的条目,或者读取和处理流中的所有后续条目。请注意,由于这些 ID 与时间相关,因此这里显示的 ID 可能会有所不同,并且与你在自己的 Redis 实例中看到的 ID 也会不同。
Redis 数据流支持多种修剪策略(防止数据流无限制增长)和多种消耗策略( XREAD、XREADGROUP 和 XRANGE)。
接下来,我们简单介绍有关Stream操作的基本命令。
1.1 XADD
为数据流添加新条目。
当我们的赛车手通过一个检查点时,我们会为每个赛车手添加一个数据流条目,其中包括赛车手的姓名、速度、位置和位置 ID:
127.0.0.1:6379[2]> XADD race:france * name pack speed 100 position 1 location 1"1732758270432-0"
在Redis中的数据展示如下:

注意:命令中的 "*" 表示自动生成ID,你也可以指定ID值,但是id值格式必须是:2个数字中间用 "-" 进行分割,你没添加的一个数据,id值不能小于上一个id值。如下示例:
127.0.0.1:6379[2]> XADD test 1-0 name pack speed 100"1-0"127.0.0.1:6379[2]> XADD test 0-0 name pack speed 100(error) ERR The ID specified in XADD must be greater than 0-0127.0.0.1:6379[2]> XADD test 0-1 name pack speed 100(error) ERR The ID specified in XADD is equal or smaller than the target stream top item127.0.0.1:6379[2]> XADD test 1-1 name pack speed 100"1-1"
最终只有最后一条添加成功。你的ID值必须要大于上一个,所以通常我们都使用 "*" 自动生成,避免这种错误。id格式:<millisecondsTime>-<sequenceNumber>
1.2 XREAD
从给定位置开始,随时间向前读取一个或多个条目。
从一个或多个数据流中读取数据,只返回 ID 大于调用者报告的最后接收 ID 的条目。如果没有可用条目,该命令可以选择阻塞
127.0.0.1:6379[2]> XREAD COUNT 1 Block 100 STREAMS race:france 0-01) 1) "race:france"2) 1) 1) "1732758270432-0"2) 1) "name"2) "pack"3) "speed"4) "100"5) "position"6) "1"7) "location"8) "1"
注意:Block xxx 作用是,如果没有数据则会阻塞多久,如果有数据则不阻塞直接返回);最后的id值:因为我们只有一条数据,所以必须要搞个小于上面id的值才能读取到数据。
1.3 XRANGE
返回两个提供的条目 ID 之间的条目范围。
该命令返回与给定ID范围内的流条目相匹配的条目。范围由最小ID和最大ID指定。返回所有ID位于这两个指定ID之间或恰好为这两个指定ID之一(闭区间)的条目。
XRANGE 命令有多种用途:
返回特定时间范围内的项目。这是因为数据流 ID 与时间相关。
对数据流进行增量迭代,每次迭代只返回几个项目。不过,从语义上讲,它比 SCAN 系列函数要健壮得多。
从数据流中抓取单个条目,提供要抓取条目的 ID(两次):作为查询间隔的开始和结束。
准备数据如下:

返回指定区间的数据


