【发布时间】:2013-02-28 14:59:16
【问题描述】:
如何记录/测量 Redis 命令队列的大小。
Redis 是单线程的,所以它按顺序运行命令,因为我猜那里有命令队列,传入的命令被存储并一一执行。 SLOWLOG 命令只显示执行时间,所以问题是,有没有办法在开始执行之前获取命令在队列中的时间。
【问题讨论】:
如何记录/测量 Redis 命令队列的大小。
Redis 是单线程的,所以它按顺序运行命令,因为我猜那里有命令队列,传入的命令被存储并一一执行。 SLOWLOG 命令只显示执行时间,所以问题是,有没有办法在开始执行之前获取命令在队列中的时间。
【问题讨论】:
AFAIK,Redis 中没有命令队列。
当套接字上有要读取的内容时,会通知事件循环。 Redis 读取套接字,解析输入缓冲区并执行从输入缓冲区解码的命令。如果同时接收到多个命令(在不同的套接字上),它们只是作为同一个事件循环迭代的一部分按顺序处理。
无法评估待处理命令的确切数量。但是,有一种方法可以使用CLIENT LIST 命令来评估输入缓冲区中仍待处理的数据量。对应qbuf统计量。
您还可以评估套接字缓冲区中仍有待处理的数据量(Redis 尚未读取的数据)。在 Linux 上,您可以为此使用 /proc/net/tcp 中的统计信息。以下是使用此策略的 Python 脚本示例。
https://gist.github.com/dspezia/2344181
您可能需要使脚本适应您的系统。
【讨论】: