- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在XDEL 之后调用XREAD 不会阻塞流,而是立即返回。预期的行为是 XREAD 再次阻塞。
127.0.0.1:6379> XADD my-stream * field1 string1
"1554300150697-0"
127.0.0.1:6379> XREAD BLOCK 5000 STREAMS my-stream 1554300150697-0
(nil)
(5.07s)
127.0.0.1:6379> XADD my-stream * field2 string2
"1554300285984-0"
127.0.0.1:6379> XREAD BLOCK 5000 STREAMS my-stream 1554300150697-0
1) 1) "my-stream"
2) 1) 1) "1554300285984-0"
2) 1) "field2"
2) "string2"
127.0.0.1:6379> XDEL my-stream 1554300285984-0
(integer) 1
127.0.0.1:6379> XLEN my-stream
(integer) 1
127.0.0.1:6379> XREAD BLOCK 5000 STREAMS my-stream 1554300150697-0
1) 1) "my-stream"
2) (empty list or set)
127.0.0.1:6379>
正如您在上面看到的,第一次调用 XREAD 时它会阻塞 5 秒 - 预期。
对 XREAD 的第二次调用立即返回,给出新条目 - 预期。
对 XREAD 的第三次调用立即返回 (空列表或集合)
- 不是预期的!预期:命令应阻塞 5 秒。
我不确定这是一个错误还是我遗漏了什么。请指教。
谢谢
最佳答案
看起来您遇到了 this known bug .
请特别查看第二条评论,它指出所提供的部分修复无法解决您遇到的问题:
It's not an entire fix for the blocking issue, since it only fixes the blocking behaviour for empty streams.
If the stream still contains some entries, but none with a larger ID than requested by the last-received-id parameter, then the request is still answered synchronously with an empty result list.
关于Redis Streams 在 XDEL 之后阻塞 XREAD 的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497990/
可以使用 XREAD(或者可能是另一个命令)以原子方式检测数据是否写入 Redis 流? 进一步来说: 假设您在一个进程中将一些数据添加到 Redis 流中,并看到数据已通过某个自动生成的 key 成
我正在将 redis 发布/订阅系统转换为 redis 流,以便我可以为服务器发送的事件添加一些容错。 订阅传统方式是微不足道的: import { createClient } from 'redi
在XDEL 之后调用XREAD 不会阻塞流,而是立即返回。预期的行为是 XREAD 再次阻塞。 127.0.0.1:6379> XADD my-stream * field1 string1 "155
你能给出一个在 Python 中使用 Redis 的 xread 和 xadd 的非常简单的例子吗(它显示了 xread 返回值的类型和格式以及 xadd 的输入) ?我已经阅读了很多文档,但没有一个
我是一名优秀的程序员,十分优秀!