You need to enable JavaScript to run this app.
导航

限制发布订阅客户端的输出缓冲区大小

最近更新时间2023.11.15 18:06:56

首次发布时间2021.11.04 14:15:17

您可以通过自定义 client-output-buffer-pubsub 参数的值,来调整 Redis 为发布订阅客户端分配的缓冲区大小。当缓冲数据超过限制时,Redis 将断开订阅客户端的连接,防止这些数据占用过多的内存,影响 Redis 服务的性能。

Redis 的输出缓冲限制

Redis 为每个客户端分配了输出缓冲区(output buffer)。处理完客户端的命令后,Redis 将返回结果临时储存在输出缓冲区中,然后将这些数据发送给客户端。如果不对输出缓冲区的大小做出限制,输出缓冲区可能积累大量数据,甚至达到最大内存限制,导致服务崩溃。以下是出现该问题的两种典型场景:

  • 客户端命令的返回值过大。
  • 发布者(publisher)发布消息的速度大于订阅者(subscriber)消费消息的速度。

合理地设置 client-output-buffer-pubsub 参数可以避免发布订阅客户端的输出缓冲区占用内存过大对服务造成负面影响。

参数说明及设置建议

client-output-buffer-pubsub 包含三个选项:hard limitsoft limitsoft seconds

  • hard limit 指定一个硬限制值,单位为 MB。当一个发布订阅客户端的输出缓冲区占用内存达到或超过 hard limit 的限制时,Redis 将断开该客户端的连接。
  • soft limit 指定一个软限制值,单位为 MB;soft seconds 指定持续触发软限制的时间,单位为 s。当一个发布订阅客户端的输出缓冲区占用内存达到或超过 soft limit 的限制,且该状态的持续时间达到 soft seconds 限定的秒数时,Redis 将断开该客户端的连接。

hard limitsoft limitsoft seconds 的默认值分别为 32MB、8MB 和 60s。您可以根据业务的实际情况来自定义这些选项的值。

操作步骤

  1. 登录 Redis 控制台
  2. 在顶部菜单栏的左上角,选择实例所属的项目和地域。
  3. 实例列表页,单击目标实例名称。
  4. 在实例详情页,单击参数配置页签。
  5. 参数列表页签,单击批量修改参数,您可以在右侧搜索栏中输入 client-output-buffer-pubsub 进行筛选。
  6. 根据业务的实际情况,分别设置 hard limitsoft limitsoft seconds 的值,设置完成后,单击参数列表左上角的提交
  7. 在弹出的对话框中,确认修改的参数和参数值,单击确定

相关 API

API
描述
DescribeDBInstanceParams调用 DescribeDBInstanceParams 接口查询指定实例的配置参数信息。
ModifyDBInstanceParams调用 ModifyDBInstanceParams 接口修改指定实例的配置参数。