2013-06-20 3 views
-1

Я сравнил эти два фрагмента кода:Предполагается, что memcached займет столько времени?

Тест 1:

$time = microtime(true); 

$memcached = new Memcached(); 
$memcached->addServer('localhost', 11211); 

for($i=1;$i<=1000;$i++){ 
    $result = $memcached->get('test'); 
} 

echo (microtime(true) - $time)*1000; 

времени Результирующая: 50,509929656982


Тест 2:

$time = microtime(true); 

$memcached = new Memcached(); 
$memcached->addServer('localhost', 11211); 

for($i=1;$i<=1000;$i++){ 
    $result = 'just me'; 
} 

echo (microtime(true) - $time)*1000; 

Результирующее время: 0.3209114074707

Возможно, memcached должен занять это долго?

+0

Можете ли вы попробовать '$ memcached-> connect()' вместо '$ memcached-> addServer()'? Это обеспечит подключение до того, как вы действительно приступите к 'get'. –

ответ

2

У вас там была довольно сложная математика. Я не думаю, что ваш вопрос совершенно ясен.

Похоже, вы получили 50.509929656982ms после умножения исходного ответа на 1000. Поэтому я собираюсь умножить это на ваш первоначальный ответ ~ 50,510 мкс. Теперь это было для 1000 запросов, поэтому средний запрос возвращался в ~ 50 мкс.

Теперь, если вы на самом деле хотите захватить 1,000 предметов, вы получите это в одном запросе на мультизапись, что значительно уменьшит это время за элемент.

Если вы спрашиваете, требуется ли время для формирования и передачи сетевого запроса и получения ответа сети, проанализировать его и вернуть, ожидается, что он будет медленнее, чем назначение NOOP в узком цикле, тогда да.

Если вы спрашиваете, быстро или медленно 50 мкс ... это действительно зависит от вас.

0

В типичной конфигурации memcached я ожидал бы, что почти каждая операция завершится в 1 мс или меньше. Я бы рекомендовал проверить, что такое задержка в сети, а затем профилировать клиента, чтобы узнать, сколько времени тратит клиент на собственно обработку операций. Если вы можете исключить медленность работы, то у вас может возникнуть проблема с сервером.

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