Blog::koyhoge – memcachedを用いた関数キャッシュ

これまでは関数キャッシュにはPEAR::Cache_Lite_Functionとかを使っていたのだけど、キャッシュ内容をディスクに書かれるのは遅い気がするし、最近はやぱしmemcachedでしょということで、Memcache extensionを使った関数キャッシュクラスを作って使っている。

関数キャッシュにmemcachedを使うというお話。

それ以前に関数キャッシュというものを知らなかった。Cache_LiteにCache_Lite_Functionというのがあるんですね。試してみました。

関数をキャッシュするって、副作用はどうなるんだろう?

$ cat func.php
<?php
foo();
foo();

function foo()
{
    static $v = 0;
    echo ++$v;
}
?>
$ php func.php
12

キャッシュ無しの場合。

$ cat cache_func.php
<?php
require_once 'Cache/Lite/Function.php';

$clf = new Cache_Lite_Function();
$clf->call('foo');
$clf->call('foo');

function foo()
{
    static $v = 0;
    echo ++$v;
}
?>
$ php cache_func.php
11

キャッシュありの場合。

デフォルトでは/tmpにできるキャッシュを見てみる。

$ cat /tmp/cache_7b181b55b55aee36ad5e7bd9d5a091ec_4109c93b3462dad44dc7bc4215c9f174
633326628a:2:{s:6:"output";s:1:"1";s:6:"result";N;}

なるほど、返り値と出力の両方をキャッシュしてくれるんですね。 色んなレベルでのキャッシング方法を覚えておくと困ったときに役に立ちそうです。

Comments


Option