memcacheの制限
きのうの memcached ネタ - にぽたん研究所
色々検索して、perlのコードをPHPに書き直して自分で実行してみて、やっと理解したorz
文字列は
$str = str_repeat('.', $size);
で作ってやってみたんだけど、デフォルトの設定じゃなかなかメモリを使い切らない。
段々上げていったら長さが1048538までしか受け付けなかったよ。この中途半端な数字は1MB-α?
そんで70回繰り返してみた。
<?php $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"); $str = str_repeat('.', $size); for ($i = 0; $i <= $count; $i++){ $m->delete($i); $m->set($i, $str) or print "set error\n"; echo "$i: " . strlen($m->get($i)) . "\n"; } sleep(1); for ($i = 0; $i <= $count; $i++){ echo "$i: " . strlen($m->get($i)) . "\n"; } ?>
こんなコード。
flush()をやってもダメ。
あとflush()で気付いたけど、flush()後はすぐにキャッシュを登録できないっぽい。新しく登録されたデータまで消去対象になってるような動き。
usleep(100000)ぐらいしたら使える。
# キャッシュサイズやデータの数によって変わるかもしれないからこの関数は使わない方が安全か