ログ日記

作業ログと日記とメモ

memcacheとapc

$size = 1;
$count = 10;

if (isset($_SERVER['argv'][1])){
     $size = $_SERVER['argv'][1];
}
if (isset($_SERVER['argv'][2])){
    $count = $_SERVER['argv'][2];
}

$m = new Memcache();
$m->connect('localhost', 11211) or die("connect error\n");

require_once 'simpletest/unit_tester.php';
$data = new GroupTest();
var_dump($data);
$str = array(str_repeat('.', $size), $data);

$start = microtime(true);
for ($i = 0; $i <= $count; $i++){
    $m->delete($i);
    $m->set($i, $str) or print "set error\n";
    $data = $m->get($i);
    echo "$i: " . strlen($data[0]) . "\n";
}

for ($i = 0; $i <= $count; $i++){
    $data = $m->get($i);
    echo "$i: " . strlen($data[0]) . "\n";
}
echo microtime(true) - $start;
$size = 1;
$count = 10;

if (isset($_SERVER['argv'][1])){
     $size = $_SERVER['argv'][1];
}
if (isset($_SERVER['argv'][2])){
    $count = $_SERVER['argv'][2];
}

require_once 'simpletest/unit_tester.php';
$data = new GroupTest();
var_dump($data);
$str = array(str_repeat('.', $size), $data);

$start = microtime(true);
for ($i = 0; $i <= $count; $i++){
    apc_delete($i);
    apc_store($i, $str) or print "set error\n";
    $data = apc_fetch($i);
    echo "$i: " . strlen($data[0]) . "\n";
}

for ($i = 0; $i <= $count; $i++){
    $data = apc_fetch($i);
    echo "$i: " . strlen($data[0]) . "\n";
}
echo microtime(true) - $start;

前のを流用してこんな感じのコード。

  • php5.1 memcache.php 1000 100
    • 0.0525870323181
    • 0.0506021976471
    • 0.0530338287354
  • php5.1 apc.php 1000 100
    • 0.0181818008423
    • 0.018483877182
    • 0.0188159942627


設定は初期のままからいじっていない。それでこの差。
Webサーバごとにmemcachedを用意するという使い方をするなら、apcの方が良さそうだ。


どちらもserializeを利用しているのでリソースは保存できない。



ファイル単位のキャッシュに関しては
[PHP-users 11491] Re: APCとPHP Accelerator で速度テストしてみたんですが。
この辺を参考に。



# 追記

apc.shm_sizeをオーバーした場合、全てのキャッシュがクリアされるみたい。
エラーが出ても次のapc_store()から保存されてる。
memcacheみたいに変な動作はしなさそう。