redis - 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 很小,则不会对性能产生影响。
推荐阅读
- node.js - TypeORM 建立关系的正确方法,需要帮助
- html - 滑动滑块在移动设备上不响应
- asp.net-core - 导航到新页面时防止 blazors 平滑页面滚动
- javascript - 如何在 Python 中从 Javascript 中读取值
- java - MappedInterceptor Bean 与 WebMvcConfigurer addInterceptors。添加 Spring HandlerInterceptor 的正确(现代)方法是什么?
- html - 为什么 Boostrap 会更改我的 html 布局以及如何恢复原始格式?
- node.js - Node/Vue:从 Node 托管的索引文件创建应用程序还是绕过?
- spring-data-jpa - 在 Spring Reactive Kafka(非阻塞调用)中使用 Spring JPA(阻塞调用)是一种好方法吗?
- javascript - 获取另一个进程的名称和大小
- scala - 我可以告诉 SBT 我不关心某个依赖项的 source/javadoc 吗?