消息发布与订阅
更新时间:2024-07-31
Redis 的发布订阅(Pub/Sub)是一种消息通信模式,其中消息发布者(publisher)发送消息到指定的频道(channel),而消息订阅者(subscriber)订阅这些频道以接收消息。百度智能云Redis 集群版和标准版均支持发布订阅,本文将描述使用发布订阅时的一些注意事项。
背景
云数据库Redis 使用基于代理的集群方案,其结构如下:
在集群版中,当用户使用发布与订阅时,客户端请求会经由 Proxy 转发给集群的第一个分片的主节点,因此所有发布与订阅都会请求都会由第一个分片主节点负责处理。
因此,当发布订阅的消息非常多时,使用集群版会给第一个分片的主节点造成很大的压力。
使用发布与订阅时的注意事项
避免建立大量大订阅连接
如前文背景信息中所描述,当客户端发送 subscribe 类命令时,Proxy 会与第一个分片的主节点建立连接,并转发此 subscribe 请求,这一条连接会被 subscribe 所独占。假如有大量的客户端均发送 subscribe 命令,那么不同的 Proxy 与第一个分片的主节点之间将建立大量的连接,这很可能导致该节点的连接数被打满。因此,在使用时,需要控制执行 subscribe 的客户端的数量,避免出现存储节点连接数打满的问题。
需使用独占的连接执行 subscribe 类命令
消息订阅者在执行 subscribe 命令时将独占一条到 Proxy 的服务器连接,并等待订阅的消息到来,这条连接上不能同时执行其他 Redis 命令。
无需单独创建客户端连接来执行 publish 命令
publish 命令发送至 Proxy 后,Proxy 会使用共享的连接转发至第一个分片的主节点,publish 命令和其他 GET/SET 这样的命令在使用上并无差别。因此无需为执行 publish 命令而单独创建一条到 Proxy 的连接。