PHP から memcached にアクセスするためには普通は PECL の memcache か memcached のどちらかを使うことになると思います。末尾にdがついてるかついていないかという1文字の違いで紛らわしいのですが違うパッケージです。
以前 memcached を使い始めた頃は前者のライブラリを使っていたのですが、今回は後者のライブラリをインストールしてみます。PECL memcached は memcache プロトコルの実装を libmemcached を使って実現していることが特徴のようです。
以下、インストールメモ。
† libmemcached のインストール
前述の通り、PECL memcached をインストールするにあたっては libmemcached が必要になります。CentOS5 なので下記の EL5 のビルド済みバイナリを rpm でインストールしてしまいます。バージョンがちょっと古いですが、これは PECL memchached の Cangelog に "Make it work with libmemcached up to 0.49." という記載があったためです。
wget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/enterprise/5/olds/i386/libmemcached-0.49-1.el5.remi.i386.rpm
wget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/enterprise/5/olds/i386/libmemcached-devel-0.49-1.el5.remi.i386.rpm
rpm -ivh libmemcached-0.49-1.el5.remi.i386.rpm libmemcached-devel-0.49-1.el5.remi.i386.rpm
† PECL memcached のインストール
次に、PECL の memcached のインストールに入ります。
wget http://pecl.php.net/get/memcached-2.0.0b2.tgz
pecl install memcached-2.0.0b2.tgz
インストールが完了したら php.ini に下記を追加して、 Apache を再起動します。
extension=memcached.so
† テスト用サンプル
今回は簡単にコンソール2つ開き、片方でサーバを起動させ、もう片方でスクリプトを実行しました。
/usr/local/bin/memcached -u apache -s /tmp/memcached_test.sock -vv
実行した php スクリプトはこんな感じです。
pecl_memcached_test.php
<?php
global $memcached;
$memcached = new memcached();
$memcached->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
//$memcached->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_IGBINARY);
$memcached->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_PHP);
$memcached->setOption(Memcached::OPT_BUFFER_WRITES, true);
$memcached->setOption(Memcached::OPT_NO_BLOCK, true);
$memcached->setOption(Memcached::OPT_TCP_NODELAY, true);
$memcached->addServer('/tmp/memcached_test.sock', 0);
$memcached->setOption(Memcached::OPT_PREFIX_KEY, 'prefix1');
var_dump($memcached->set("aaa","bbb"));
var_dump($memcached->get("aaa"));
$memcached->setOption(Memcached::OPT_PREFIX_KEY, 'prefix2');
var_dump($memcached->set("aaa",array(1,2,3)));
var_dump($memcached->get("aaa"));
var_dump($memcached->flush());
var_dump($memcached->get("aaa"));
実行結果はこんな感じになります。
$ php pecl_memcached_test.php
bool(true)
string(3) "bbb"
bool(true)
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
bool(true)
bool(false)