首页 > 解决方案 > 如何在 Redis 流中使用背压?

问题描述

我是否遗漏了什么,或者没有办法使用 Redis 流产生背压?如果生产者将数据推送到流中,消费者可以更快地消费它,那么没有明显的方法可以向生产者发出信号表明它应该停止或放慢速度。

我预计会有一个阻塞版本XADD,它会阻塞客户端,直到空间在有上限的流中可用(类似于XREAD允许消费者等待数据可用的阻塞版本),但这似乎不是案子。

人们如何处理上述情况——向生产者发出信号,告诉它应该推迟向流中添加更多项目?

我了解一些数据流系统(例如 Kafka)不需要背压,但 Redis 似乎没有可比的解决方案,而且对于许多 Redis 流用例来说,这似乎是一个相对常见的问题。

标签: redisstream

解决方案


如果您打开了持久性(RDB 或 AOF),您的流消息将被持久化,因此不需要背压。
如果你使用副本,你就会有另一个级别的冗余。
仅当 Redis 没有足够的内存(或副本的足够网络带宽)来保存消息时才需要背压。
而且,老实说,我从未见过这种情况。


推荐阅读