【问题标题】:What's the size limitation of a message when PUB/SUB in Redis channelRedis通道中PUB / SUB时消息的大小限制是多少
【发布时间】:2021-04-21 19:04:35
【问题描述】:

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

【问题讨论】:

    标签: python redis publish-subscribe


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      更新答案

      在下面的原始答案之后,我遇到了实际答案。 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
      

      我称之为“经验”答案。

      【讨论】:

      • 这真的很有用,谢谢@Mark!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2013-08-07
      • 2018-09-13
      • 2022-01-23
      • 2013-03-04
      相关资源
      最近更新 更多