xcacheを入れてみる
キャッシュ機構が欲しいけれどmemcachedまでは要らないかな、と思ってaptitude searchを眺めているとxcacheというのがあることに気付いた。
aptitude install php5-xcache
使い方は検索しても全然出てこない。どこもインストールと速度調査の記事ばかり。
aptで入れるからインストールは一瞬。その代わり.soファイルとそれを読み込むiniファイルしかない。READMEもサンプル設定ファイルもない。
仕方がないので本家を見る。
http://xcache.lighttpd.net/
パッケージのxcacheはバージョン1.3で、PHP5.3に対応したバージョンらしい。
管理用のファイルがないので取ってきて適当な場所に置く。
wget http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz mv xcache-1.3.0/admin ~/public_html/xcacheadmin cd ~/public_html/xcacheadmin/
http://localhost/xcacheadmin/mkpassword.php にアクセスしてmd5形式のパスワードを生成する。
そして/etc/php5/conf.d/xcache.ini を編集する。
; configuration for php xcache module extension=xcache.so xcache.admin.user = "admin" xcache.admin.pass = "md5 password"
これでWeb管理画面が使える。
iniファイルの説明はここ。
http://xcache.lighttpd.net/wiki/XcacheIni
取り敢えずキャッシュをオンにしてみる。
xcache.size = 100M xcache.var_size = 50M
キャッシュのサンプルコードはここ。
http://xcache.lighttpd.net/wiki/XcacheApi
試しに使ってみる。
<?php $d = new DateTime(); xcache_set('date', $d); var_dump(xcache_get('date'));
同じセッションだとオブジェクトそのままでも使えるが、別のセッションでxcache_getだけ使ってオブジェクトを取得しようとするとSegmentation fault (11)で落ちる。そりゃそうか…。
<?php $d = new DateTime(); xcache_set('date', serialize($d)); var_dump(unserialize(xcache_get('date')));
これならいけそう。
ここまでやってから他の方法を探してみた。サーバ一台なら通常ファイルが一番いい気がしてきた。
- http://www.tsujita.jp/blojsom/blog/default/PHP/2007/01/12/memcached%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9FPHP%E3%81%AE%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%88%E3%83%B3%E5%AE%9F%E8%A3%85.html
- memcachedを使ったPHPのシングルトン実装? - yoyaのメモ
- memcachedを用いた関数キャッシュ - Blog::koyhoge::Tech
うーむ。
素直にPythonとかRubyとかを使うべきなのかなぁ。
PHPでマゾいことをやるか…。
検索してたらEthnaのソースコードがあった。
http://svn.sourceforge.jp/svnroot/ethna/ethna/branches/ETHNA_UTF8_BRANCH/class/Ethna_ClassFactory.php
コメントが読みやすいね。