Есть много частей обработки команды.Сначала вы отправляете его от клиента к серверу по сети, затем работник TCP на сервере читает клиентский буфер, обрабатывает сообщение и помещает его в очередь команд, затем в конечном итоге основной цикл Redis извлекает команду из очереди, обрабатывает ее (когда эта часть заканчивается, ключ фиксируется) , затем записывает ответ в клиентский буфер, а затем, в конечном итоге, работник TCP обнаруживает, что ответ готов, и отправляет его клиенту по сети.В 99% случаев отправка по проводам - это то, где вы проводите большую часть времени.
Метрика, которую вы предложили - от выдачи команды до фиксации ключа, трудно измерить, просто потому, что эти события происходят с разных сторон,Но что более важно, вам не нужно измерять это.Две основные метрики, измеряемые в таких системах:
- задержка (от отправки команды до получения ответа)
- пропускная способность (сколько команд от разных клиентов может обработать сервер заинтервал времени, обычно в секундах)
Если по какой-то причине вы настаиваете на его измерении, вы можете сделать следующее:
- Убедитесь, что время сервера и клиентских машин идеальносинхронизируются.Redis работает быстро, поэтому масштаб может пойти даже до наноса.
- до сохранения текущего времени в клиенте (например,
long start = System.nanoTime();
в Java) - Вызов не установлен, но скрипт lua:
eval "redis.call('set','my_key','3,1415') return redis.call('time')" 0
- На клиенте вычтите время начала с момента, когда вы получили ответ.Вам нужно будет обрабатывать разницу в форматах вывода, Redis дает микросекундную точность.
- Делайте это много раз, чтобы получить стабильные результаты.Вы получите более медленный результат , потому что некоторое время будет потрачено на сценарии lua и даже на измерение времени.