Redis,XREADGROUP流加块一年,笨蛋?

Redis,XREADGROUP流加块一年,笨蛋?,redis,redis-streams,Redis,Redis Streams,告诉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中流的阻塞机制吗 “另一方面,当XREADGROU

告诉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很小,则不会对性能产生影响。

对于_stack,您的意思是N作为消费者通知他们所有人,即使消息没有添加到自己的流中?当这些流阻塞并将消息添加到另一个流时会发生什么?它们会被释放并得到一个空值吗?不。比如说,有两个流:流a和流B,都是空的。流A上有3个客户端阻塞,流B上有5个客户端阻塞。如果在流A上调用XADD,流A上所有3个客户端阻塞都将被解除阻塞。但是,流B上阻塞的5个客户端将继续阻塞。在这个例子中,N是3,谢谢你的解释。当你说所有3个客户端都被释放时,我能期望至少2个其他客户端中有空值吗?我用的是绝地武士,不确定他们是如何处理这些案件的。也许我不应该期望客户提供值,而是首先返回检查值。否。由于这些使用者具有不同的组名,因此所有3个客户端都将使用您刚才添加的消息解除阻止。在您的情况下,每个客户端都有一个唯一的使用者名称,并且该消息将由同一组中的一个且仅一个使用者使用。其他客户端继续阻塞流。