Redis通道中PUB/SUB时消息的大小限制是多少

问题描述 投票:0回答:2

我目前正在我的一个项目中实现redis PUB/SUB,这引起了我的担忧,在Redis通道中PUB/SUB时消息的大小限制是多少。该限制是否等于计算机的可用内存?或者配置文件的某个地方会有一个阈值。谢谢!

python redis publish-subscribe
2个回答
4
投票

更新答案

在我下面的原始答案之后,我找到了实际的答案。

redis.conf
中有一个配置参数叫做:

client-output-buffer-limit

您可以通过以下方式检查:

config get client-output-buffer-limit
"normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"

pub/sub
后的33554432是发布/订阅客户端的最大缓冲区大小,8388608是软限制,超过60秒不得超过。

因此,如果您使用如下命令提高限制,我下面的答案会发生变化:

config set client-output-buffer-limit "normal 0 0 0 slave 268435456 67108864 60 pubsub 53554432 8388608 60"

我还没有做过任何测试来判断这是否可取、安全甚至明智,但认为它与答案有实质性相关。

原答案

我不知道限制出现在哪里,但仅供参考,我用

redis-cli
客户端做了一些简单的测试,像这样订阅:

redis-cli SUBSCRIBE myStream

我以 1MB 的倍数发送数据,如下所示:

dd if=/dev/zero bs=$((1024*1024)) count=20  | redis-cli -x PUBLISH myStream

因此,上面的命令在 20MB 时有效,但以下命令在 21MB 时失败:

dd if=/dev/zero bs=$((1024*1024)) count=21  | redis-cli -x PUBLISH myStream

并且订阅者已与消息断开连接:

Error: Server closed the connection

我称其为“经验主义”答案。


3
投票

仅供参考,我自己实验过,在我的机器(Debian 5.4.8-1)上大约上限大小约为 21MB 到 22MB(可能会因操作系统和 redis 版本而异),这会导致 redis ConnectionError:连接被服务器关闭。

© www.soinside.com 2019 - 2024. All rights reserved.