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中流的阻塞机制吗?

解决方法

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

说,流为空,并且N个客户端使用不同的组名呼叫XREADGROUP。由于流为空,因此这些客户端将阻塞,直到收到新消息为止。

当您调用XADD将消息添加到流中时,Redis需要向这N个阻止客户端发送回复。这就是XADD要付出O(N)时间的原因。

告诉XREADGROUP阻止直到出现消息,而不是客户端必须轮询,是否有不利之处?

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