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

Redis的输出缓冲限制

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

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

合理地设置client-output-buffer-limit pubsub参数可以避免发布订阅客户端的输出缓冲区占用内存过大。

选项说明

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

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

在云数据库Redis版中,hard limitsoft limitsoft seconds的默认值分别为33554432、8388608和60,即32MB、8MB和60s。您可以根据业务中值的大小和客户端的处理能力自定义这些选项的值。

在Redis管理控制台设置参数

  1. 登录Redis管理控制台
  2. 在界面左上方阿里云图标的右侧选择实例所在的地域 。
  3. 单击目标实例的实例ID或者操作列的管理
  4. 实例信息页的左侧导航栏中,单击参数设置
  5. 在参数列表中,单击client-output-buffer-limit pubsub右侧操作列的修改
    client-output-buffer-limit pubsub
  6. 在弹出的对话框中完成以下步骤。
    1. 按照选项说明设置client-output-buffer-limit pubsub的值。
    2. 单击确定

使用API设置参数

除了在控制台修改参数的值,您还可以调用ModifyInstanceConfig接口来设置参数。