如何监视Redis pubsub订阅中的积压?

正如Google Code上的一个问题所logging的 ,当Redis pubsub客户端无法跟上发布到频道的消息速率时,Redis会为该客户端保留一个不断增长的消息积压,使用越来越多的内存时间继续。

我想要检测这种情况何时发生,并通知它,或者至less能够检查哪些pubsub订阅者有积压,以及他们有多大。 有没有办法做到这一点?

https://code.google.com/archive/p/redis/issues/525中描述的错误不再存在。 尽pipe没有文档记载的方式来获得PubSub客户端不能跟上的高级警告,但Redis将终止来自慢速客户端的连接,以防止自己的内存不足,并通过其日志文件通知您。 根据文档 :

输出缓冲区限制

…客户端可能会发送更多的命令来产生更多的输出,从而以更快的速度服务于Redis可以将现有输出发送到客户端的速度。 Pub / Sub客户端尤其如此,以防客户端无法足够快地处理新消息。

[这]会导致客户端输出缓冲区增长并消耗越来越多的内存。 出于这个原因,默认情况下,Redis为不同types的客户端设置输出缓冲区大小的限制。 达到限制时,将closures客户端连接,并将事件logging在Redis日志文件中。

Redis使用两种限制:

  • 硬限制是一个固定的限制,当达到时将使Redis尽快closures客户端连接。

  • 软限制取决于时间,例如每10秒32 MB的软限制意味着,如果客户端的输出缓冲区大于32 MB,持续10秒,则连接将closures。

不同types的客户有不同的默认限制:

  • Pub / Sub客户端具有32兆的默认硬限制和每60秒8兆的软限制。

可以使用CONFIG SET命令在运行时更改限制,或者使用Redisconfiguration文件redis.conf以永久方式更改限制。 有关如何设置限制的更多信息,请参阅Redis分发中的示例redis.conf。