Redis 通道中 PUB/SUB 时消息的大小限制是多少
What's the size limitation of a message when PUB/SUB in Redis channel
我目前正在我的一个项目中实现 redis PUB/SUB,这引起了我的关注,Redis 通道中 PUB/SUB 时消息的大小限制是多少。限制是否等于计算机的可用内存?或者在配置文件的某处会有一个阈值。谢谢!
更新答案
在我下面的原始答案之后,我找到了实际答案。 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 是 pub/sub 客户端的最大缓冲区大小,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
我称之为“经验”答案。
仅供参考,我自己进行了实验,我的机器 (Debian 5.4.8-1) 上的上限大约为 21MB 到 22MB(可能因 OS 和 redis 版本而异) , 会导致redis ConnectionError: Connection closed by server.
我目前正在我的一个项目中实现 redis PUB/SUB,这引起了我的关注,Redis 通道中 PUB/SUB 时消息的大小限制是多少。限制是否等于计算机的可用内存?或者在配置文件的某处会有一个阈值。谢谢!
更新答案
在我下面的原始答案之后,我找到了实际答案。 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 是 pub/sub 客户端的最大缓冲区大小,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
我称之为“经验”答案。
仅供参考,我自己进行了实验,我的机器 (Debian 5.4.8-1) 上的上限大约为 21MB 到 22MB(可能因 OS 和 redis 版本而异) , 会导致redis ConnectionError: Connection closed by server.