adr*_*ian 5 python publish-subscribe redis
我目前正在我的一个项目中实现redis PUB/SUB,这引起了我的担忧,在Redis通道中PUB/SUB时消息的大小限制是多少。该限制是否等于计算机的可用内存?或者配置文件的某个地方会有一个阈值。谢谢!
更新答案
在我下面的原始答案之后,我找到了实际的答案。调用中有一个配置参数redis.conf:
client-output-buffer-limit
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式检查:
config get client-output-buffer-limit
"normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
Run Code Online (Sandbox Code Playgroud)
后面的 33554432pub/sub是 pub/sub 客户端的最大缓冲区大小,8388608 是软限制,超过 60 秒不得超过。
因此,如果您使用如下命令提高限制,我下面的答案会发生变化:
config set client-output-buffer-limit "normal 0 0 0 slave 268435456 67108864 60 pubsub 53554432 8388608 60"
Run Code Online (Sandbox Code Playgroud)
我还没有做过任何测试来判断这是否可取、安全甚至明智,但我认为这与答案密切相关。
原答案
我不知道限制出现在哪里,但仅供参考,我与redis-cli客户端做了一些简单的测试,订阅如下:
redis-cli SUBSCRIBE myStream
Run Code Online (Sandbox Code Playgroud)
我以 1MB 的倍数发送数据,如下所示:
dd if=/dev/zero bs=$((1024*1024)) count=20 | redis-cli -x PUBLISH myStream
Run Code Online (Sandbox Code Playgroud)
因此,上面的命令在 20MB 时有效,但以下命令在 21MB 时失败:
dd if=/dev/zero bs=$((1024*1024)) count=21 | redis-cli -x PUBLISH myStream
Run Code Online (Sandbox Code Playgroud)
并且订阅者已与消息断开连接:
Error: Server closed the connection
Run Code Online (Sandbox Code Playgroud)
我称之为“经验”答案。
| 归档时间: |
|
| 查看次数: |
4935 次 |
| 最近记录: |