首页 > 解决方案 > Redis,XREADGROUP 流与块一年,愚蠢?

问题描述

告诉 XREADGROUP 阻止直到有消息而不是客户端必须轮询是否有任何缺点?

从:

https://redis.io/commands/xreadgroup

目前尚不清楚这意味着:

"On the other side when XREADGROUP blocks, XADD will pay the O(N) time in order to serve the N clients blocked on the stream getting new data."

有人可以阐明Redis 中流的阻塞机制吗?

标签: redisredis-streams

解决方案


“另一方面,当 XREADGROUP 阻塞时,XADD 将支付 O(N) 时间,以便为在获取新数据的流上阻塞的 N 个客户端提供服务。”

比如说,流是空的,N 个客户端XREADGROUP用不同的组名调用。由于流是空的,这些客户端将阻塞,直到有新消息。

当你调用XADD向流中添加消息时,Redis 需要向这 N 个阻塞客户端发送回复。这就是为什么XADD要支付 O(N) 时间的原因。

告诉 XREADGROUP 阻止直到有消息而不是客户端必须轮询是否有任何缺点?

如果 N 非常大,即太多的客户端阻塞在流上,XADD命令可能会阻塞 Redis 一段时间,因为它是单线程的。如果 N 很小,则不会对性能产生影响。


推荐阅读