微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Redis通道中PUB/SUB消息的大小限制是多少

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

解决方法

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

,

更新答案

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

我称之为“经验性”答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。