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.rpmwget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/enterprise/5/olds/i386/libmemcached-devel-0.49-1.el5.remi.i386.rpmrpm -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.tgzpecl 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
<?phpglobal $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.phpbool(true)string(3) "bbb"bool(true)array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}bool(true)bool(false)