Are there any downsides to telling XREADGROUP to block until there is a message rather than the client having to poll?
From:
https://redis.io/commands/xreadgroup
It is not clear that this means:
"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."
Can someone shed some light on the blocking mechanisms of streams in Redis?
Say, the stream is empty, and N clients call
XREADGROUP
with different group names. Since the stream is empty, these clients will block until there's new message.When you call
XADD
to add a message to the stream, Redis need to send replies to these N blocking clients. That's whyXADD
will pay O(N) time.If N is very large, i.e. too many clients blocking on the stream,
XADD
command might block Redis for a while, since it's single-threaded. If N is small, there won't be performance impact.