2013-06-20 27 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

你在那里搞了很多令人迷惑的数学。我不认为你的问题是完全清楚的。

看起来您将原始答案乘以1,000后得到了50.509929656982ms。所以我要把它放大到原来的答案〜50,510μs。现在,这是针对1,000个请求,所以平均请求的返回时间为50μs。

现在,如果您确实想要抓取1,000个物品,那么您只需要一个multiget请求,这会大大减少每件物品的平均时间。

如果你问是否需要时间来形成和传输网络请求并获得网络响应,那么对它进行解析并返回它,预计会比严格循环中的NOOP分配慢。

如果你问50微秒是快还是慢?这真的取决于你。

0

在典型的memcached设置上,我期望几乎每个操作都能在1ms或更短的时间内完成。我会建议检查一下你的网络延迟,然后分析客户端,看看客户端花了多少时间来处理操作。如果你可以排除那些缓慢的话,你可能会遇到某种服务器端问题。