2013-06-20 28 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或更短的時間內完成。我會建議檢查一下你的網絡延遲,然後分析客戶端,看看客戶端花了多少時間來處理操作。如果你可以排除那些緩慢的話,你可能會遇到某種服務器端問題。