# Redis Streams

Redis Streams简介

Redis Streams是一种数据结构,其作用类似于仅附加日志。您可以使用流实时记录和同步事件。Redis 流用例的示例包括:

  • 事件溯源(例如,跟踪用户操作、点击等)
  • 传感器监控(例如,现场设备的读数)
  • 通知(例如,将每个用户的通知记录存储在单独的流中)

Redis 为每个流条目生成一个唯一的 ID。您可以使用这些 ID 稍后检索其关联条目或读取和处理流中的所有后续条目。

Redis 流支持多种修剪策略(以防止流无限增长)和一种以上的消费策略(请参阅 XREADXREADGROUPXRANGE )。

# 例子

  • 将多个温度读数添加到流中
> XADD temperatures:us-ny:10007 * temp_f 87.2 pressure 29.69 humidity 46
"1658354918398-0"
> XADD temperatures:us-ny:10007 * temp_f 83.1 pressure 29.21 humidity 46.5
"1658354934941-0"
> XADD temperatures:us-ny:10007 * temp_f 81.9 pressure 28.37 humidity 43.7
"1658354957524-0"
  • 读取从 ID 开始的前两个流条目1658354934941-0
> XRANGE temperatures:us-ny:10007 1658354934941-0 + COUNT 2
1) 1) "1658354934941-0"
   2) 1) "temp_f"
      2) "83.1"
      3) "pressure"
      4) "29.21"
      5) "humidity"
      6) "46.5"
2) 1) "1658354957524-0"
   2) 1) "temp_f"
      2) "81.9"
      3) "pressure"
      4) "28.37"
      5) "humidity"
      6) "43.7"
  • 从流的末尾开始读取最多 100 个新的流条目,如果没有写入条目,则最多阻塞 300 毫秒:
> XREAD COUNT 100 BLOCK 300 STREAMS tempertures:us-ny:10007 $
(nil)

# 基本命令

  • XADD 向流中添加新条目。
  • XREAD 读取一个或多个条目,从给定位置开始并及时向前移动。
  • XRANGE 返回两个提供的条目 ID 之间的条目范围。
  • XLEN 返回流的长度。

请参阅 流命令的完整列表

# 表现

向流中添加条目是 O(1)。访问任何单个条目都是 O(n),其中n是 ID 的长度。由于流 ID 通常很短且具有固定长度,因此这有效地减少了恒定时间查找。有关原因的详细信息,请注意流是作为 基数树 实现的。

简而言之,Redis 流提供了高效的插入和读取。有关详细信息,请参阅每个命令的时间复杂度。

# 学到更多

  • Redis Streams 教程 通过许多示例解释了 Redis 流。
  • Redis Streams Explained 是对 Redis 中流的有趣介绍。
  • Redis University 的 RU102 是专门针对 Redis Streams 的免费在线课程。
Last Updated: 4/18/2023, 8:45:33 AM