調べてみたらPEAR::Cache_Liteが思った以上に頼りないことが解ったのでキャッシュ機構の入れ替えを検討。

【メモ】PEAR::Cache_Liteの生存期間について誤解してたこと(追記あり) | mutter

いろいろ考えたのだけど、個人プロジェクトなんだし好奇心優先って事でKyotoCabinetとそれを扱うKyotoTycoonを入れて、PECL::Memcachedを利用して接続してみることにしました。PHP側については、OpenPEARの方に「Net_KyotoTycoon」と言うライブラリもアップされているのですが、まぁ今は良いかなと言うことで。

Net_KyotoTycoon \ パッケージ \ Openpear
KyotoTycoon の PHP 版を作った - Heavens hell

と言うわけで、以下インストール。

KyotoCabinetのインストール

# yum install -y lzo-devel lzma-devel xz-devel
# wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.74.tar.gz
# tar zxvf kyotocabinet-1.2.74.tar.gz
# cd kyotocabinet-1.2.74
# ./configure --prefix=/usr/local/kyotocabinet --enable-lzo --enable-lzma
# make
# make install
# echo /usr/local/kyotocabinet/lib > /etc/ld.so.conf.d/kyotocabinet.conf
# ldconfig

最新版はこの辺に:
http://fallabs.com/kyotocabinet/pkg/

参考:
KyotoTycoon + KyotoCabinetのベンチマーク - 逆襲のWebエンジニア



KyotoTycoonのインストール

# yum install lua-devel.x86_64
# wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.55.tar.gz
# tar zxvf kyototycoon-0.9.55.tar.gz
# cd kyototycoon-0.9.55
# ./configure --prefix=/usr/local/kyototycoon --with-kc=/usr/local/kyotocabinet --enable-lua
# make
# make install
# echo /usr/local/kyototycoon/lib > /etc/ld.so.conf.d/kyototycoon.conf
# ldconfig

最新版はこの辺に:
http://fallabs.com/kyototycoon/pkg/

参考:
KyotoTycoon + KyotoCabinetのベンチマーク - 逆襲のWebエンジニア



memcachedとPecl::Memcachedをインストール

# yum install -y memcached
# yum install -y php-pecl-memcached

yumは便利ですね。といっても多分memcached要らないけど…



KyotoTycoonをサービスに登録して起動

# cp lab/ktservctl /usr/local/sbin/
# cp lab/ktservctl /etc/init.d/ktserver

# vi /etc/init.d/ktserver

起動スクリプトを編集

chkconfig用設定を追加。
#----------------------------------------------------------------
# Startup script for the server of Kyoto Tycoon
# chkconfig:   - 80 20
# description: Kyoto Tycoon - KVS Database
#----------------------------------------------------------------

memcached として起動するように設定を変更。
#miscopts="-oat"
#ulogdir="$basedir/ulog"
#ulim=1g
#sid=1

miscopts="-plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so -plex port=11211#opts=f"
ulogdir="$basedir/ulog"
ulim=1g
sid=1

PATHに追加
PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/kyototycoon/bin"

サービスに追加

# chkconfig --add ktserver

起動

# service ktserver start

参考:
suz-lab - blog: "Kyoto Tycoon (memcached plugin)"を"CentOS 6.2"にインストール



以上でインストールは終わりです。



PECL::Memcachedで接続してみる

以下、超簡単なサンプルプログラム。

$m = new Memcached();
$m->set('foo', 100, 10);
var_dump($m->get('foo'));   //(int) 100

特に問題は無いようです。生存期間もきちんと動いていて、上記スクリプトで設定したキャッシュは10秒後にきっちり削除されます。いや、キャッシュって普通こうだよね…



ちなみに…

このキャッシュはTumblr Thumnailsで既に実装済みです。安定してるようです。




追記:2012/06/04

DQNEOさんから以下の指摘を受けました。



こちらで検証もされています。

[シェルスクリプト] めちゃめちゃ気づきにくいバックスラッシュによるバグ - DQNEO起業日記

あーなるほど確かに。
こちらでも動作を確認しましたので、記事を修正しました。

DQNEOさんご指摘ありがとうございました。