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