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