memcacheの中身を表示させるコードがなぜか遅い

memcacheの中身を表示させるコードがなぜか遅い。

こっちはpecl-memcacheに入ってるmemcache.phpmから作ってみたコード。dumpCacheSlab()を使ってるけど、これはtcp/ipでsocket通信してmemcacheの操作を行う。遅い。なんでだー。

list($host, $port) = explode(':', $server);
 $cacheItems = getCacheItems();
 $items = $cacheItems['items'];
 $mstime = microtime();
 foreach($items as $iserver => $entries){
 if($server == $iserver){
 foreach($entries as $slabId => $slab){
 $dump = dumpCacheSlab($server, $slabId);
 var_dump((memory_get_usage()/1024/1024).'MB');
 var_dump('count ' . count($dump['ITEM']));
 //$ret=  array_merge((array)$ret, (array)$dump['ITEM']);
 }
 }
 }
 return $ret;

こっちは自作のコード。pecl-memcacheのmemcacheクラスを使ってる。早い。なんでだー

function getAllMemcacheKeys($server){
$mi = new Memcache();
list($host,$port) = explode(':',$server);
$mi->connect($host);
$slabs = $mi->getExtendedStats('slabs');
foreach($slabs[$server] as $key => $value){
if ($key !== 'active_slabs' && $key !== 'total_malloced') {
$memarr = $mi->getStats('cachedump', $key, 100000);
var_dump(count($memarr) . "\t " . (memory_get_usage()/1024/1024).'MB');
foreach((array)$memarr as $key => $value){
//var_dump($key);
}
}
}

コメントを残す