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みたいに変な動作はしなさそう。