问题标签 [redis-streams]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
281 浏览

redis - 通过 redis 流的 Redis 事务日志

redis 是否通过等效于 Dynamo Db 流的 redis 流提供事务日志来处理 Dynamo Db 数据的变化?

0 投票
1 回答
10199 浏览

redis - Redis Streams vs Kafka Streams/NATS

Redis 团队为 Redis 5.0引入了新的Streams数据类型。由于 Streams 从第一个角度看起来像 Kafka 主题,因此似乎很难找到使用它的真实示例。

流介绍中,我们与 Kafka 流进行了比较:

  1. 运行时消费者组处理。例如,如果三个消费者中的一个永久失败,Redis 将继续服务第一个和第二个,因为现在我们将只有两个逻辑分区(消费者)。
  2. Redis 流更快。他们从内存中存储和操作,所以这个就是这样。

我们有一些与 Kafka、RabbitMq 和 NATS 相关的项目。现在我们深入研究 Redis 流,尝试将其用作“pre kafka 缓存”,在某些情况下用作 Kafka/NATS 替代方案。现在最关键的一点是复制:

  1. 使用 AOF 复制将所有数据存储在内存中。
  2. 默认情况下,异步复制不会保证 XADD 命令或消费者组状态更改被复制:在故障转移之后,可能会丢失某些东西,这取决于追随者从主服务器接收数据的能力。这看起来像是扼杀任何尝试高负载流的兴趣。
  3. 由 Sentinel 或 Redis Cluster 操作的 Redis 故障转移过程仅执行尽力检查以故障转移到最新的追随者,并且在某些特定故障下可能会提升缺少某些数据的追随者。

还有上限策略。Redis Streams 的真正“上限资源”是内存,因此要存储多少项目或使用哪种上限策略并不那么重要。因此,每次您的消费者失败时,您都会获得峰值内存消耗或因上限而丢失的消息。

我们使用 Kafka 作为 RTB 投标人前端,每秒处理约 1,100,000 条消息,负载约 120 字节。使用 Redis,我们在写入时消耗约 170 mb/秒的内存,使用 512 GB RAM 服务器,我们为约 50 分钟的数据写入“保留”。因此,如果此时处理系统处于脱机状态,我们就会崩溃。

您能否详细介绍一下 Redis Streams 在现实世界中的使用情况,并且在某些情况下您可能会尝试自己使用它?或者可能是 Redis Streams 可以用于少量数据?

0 投票
3 回答
2246 浏览

python - 将 Redis Streams 输出转换为 Pandas Dataframe

Redis Stream输出(aioredis 客户端/hiredis 解析器)转换为 Pandas Dataframe的最快方法是什么,其中 Redis Stream ID 的时间戳序列号以及值是正确类型转换的 Pandas 索引列?

示例 Redis 输出:

0 投票
1 回答
592 浏览

redis - COUNT 如何处理 XREADGROUP 中的多个流?

我想使用 RedisXREADGROUP命令来使用来自多个Redis 流的消息。在这种情况下,参数是什么COUNT意思(即它是消息的总数,还是每个流的消息数)?此外,是否可以在这种情况下准确读取一条消息?

0 投票
1 回答
1662 浏览

redis - 如何防止Redis流内存无限增加?

我刚刚意识到只有一个消费者组存在时,XACK 不会自动删除消息。

我以为当所有消费者组都确认相同的消息时,该消息将被 Redis-server 删除,但似乎并非如此。

因此,Redis 流内存无限增加,因为不会删除任何消息。

也许防止这种情况的唯一方法是手动 XDEL 消息?但是我怎么知道所有的消费者群体都已经确认了这个消息呢?

需要帮助,谢谢!

0 投票
1 回答
168 浏览

redis - 如何在redis流中有效地使用XRange获取多条记录

查看 Redis 流并在流上构建索引(就像 EventStore 所做的那样),这工作得很好,我可以在流中获得一堆条目,除非我找不到一种按 id 返回所有记录的好方法,例如 MGET。这是我正在查看的内容的简化版本。

显然这是非常低效的,我想知道是否有某种方法可以在 1 个请求中从服务器获取它。

我还考虑过构建其他流的流,但它会导致消息重复,并且我们的消息会变大。是的,我可以将所有消息放在一个集合中,但是 2 级间接是一个太过分的桥梁。

0 投票
1 回答
1607 浏览

python - Redis Streams 使用 XREAD 获取多个值

我有一个 redis 流“mystream”,我正在尝试使用:

XREAD 计数 5 块 50000 流 mystream $

读取附加到 mystream 的五个新条目,阻塞 50 秒。一旦我执行命令以使用以下命令将数据添加到 mystream:

XADD mystream a 5 b 6

被阻止的命令以单个条目作为输出退出。

有没有什么方法可以使用 XREAD 命令接收从现在到 50 年代附加的多个条目,或者我是否必须多次调用 XREAD 才能达到相同的效果?

0 投票
2 回答
1951 浏览

redis - Redis 流 - 根据时间删除/过期事件

我正在玩 redis 流,到目前为止还不错。我试图了解是否有任何方式让我根据时间或其他方式使旧事件过期。我知道我们可以通过事件 ID 删除。但我不想记住/存储很难的事件ID。相反,我正在寻找一种方法来删除最后的 10K 事件或类似的东西。

0 投票
1 回答
406 浏览

redis - Redis 流 50k 消费者支持并行 - 容量要求

要支持一个消费者组内的 50k 个消费者并行消费和处理消息,Redis 的容量要求是多少?正在寻找针对相同场景的基础架构测试,并且需要了解注意事项。

0 投票
1 回答
1549 浏览

redis - Redis Stream - 事件的订单保证

我用过卡夫卡。在 Kafka 中,事件的顺序是通过使用 id 来保证的。我们在 Redis 中有类似的东西吗?如果我在一个消费者组中有订单事件流和多个消费者,则与一个特定订单相关的所有事件都应按顺序处理。


事件 - 需要宣布的消息/通知/发生的任何事情。像订单创建事件,订单取消事件。


为了更清楚,

假设user1通过 order-service订购了一个名为ABC1的产品。此订单服务发布一个purchase-order-relatedstram。user1 修改/更新订单服务在同一流中发布另一个事件作为第二条消息的 ABC1 的数量。这里消息的 ID 可能不同。但是,当有多个消费者时,是否可以保证这 2 条消息将由消费者组中的 1 个消费者处理?因为这两个消息/事件是相关的,应该按顺序处理。Kafka 通过使用ABC1产品购买的 order-id 进行分区来提供保证。