2013-03-12 5 views
3

Как регистрировать/измерять размер очереди команд Redis.Redis команды queue size

Redis является однопоточным, поэтому он последовательно запускает команды, так как я предполагаю, что там есть командная очередь, где входящие команды хранятся и выполняются один за другим. Команда SLOWLOG показывает только время выполнения, поэтому возникает вопрос: существует ли способ, чтобы команда была в очереди до начала выполнения.

ответ

3

AFAIK, в Redis нет очереди команд.

Цикл событий уведомляется, когда есть что-то прочитать в сокете. Redis считывает сокет, анализирует входной буфер и выполняет команды по мере их декодирования из входного буфера. Если несколько команд принимаются в одно и то же время (в разных сокетах), они просто обрабатываются последовательно как часть той же самой итерации цикла событий.

Невозможно оценить точное количество ожидающих команд. Однако есть способ оценить количество данных, которые еще предстоит обработать во входном буфере, используя команду CLIENT LIST. Это соответствует статистике qbuf.

Вы также можете оценить объем данных, которые еще предстоит обработать в буферах сокетов (данные еще не прочитаны Redis). В Linux вы можете использовать статистику, найденную в/proc/net/tcp для этого. Ниже приведен пример скрипта Python с использованием этой стратегии.

https://gist.github.com/dspezia/2344181

Вы, возможно, придется адаптировать сценарий к вашей системе.

Смежные вопросы