如何解决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 举报,一经查实,本站将立刻删除。