kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

PHP memcached が遅い件にぶち当たりましたが、解決しました。

PHP7に変更して、PHP memcacheがないことでいろいろと調べながらmemcachedを導入してみました。

ただmemcachedを使った場合だけものすごく遅くなったため、対応した内容をメモで残しておくための記事です。

結論から

libmemcachedが1.0.16だったのが悪かった模様。

たしかにgithubに書いてありますね。

libmemcached version 1.0.18 or higher is recommended for best performance and compatibility with memcached servers

バージョンをあげれば大丈夫だったみたいですが、ちょっと大変だったためメモを残しておきたかった感じです。

これがわかるのに1日以上かかったのはきつかったですね。

環境

php-memcached

github.com

php7 にはmemcacheがないらしく、有志の方たちが対応してくれたライブラリであるmemcachedを利用しています。

「PHP7にmemcachedを導入」についてはいろいろな方がやっていたので、しらべたらすぐにわかると思います。

今回はlibmemcached のコンパイル、インストール。そしてphp-memcachedでのDynamic Linkがlibmemcached 1.0.18になっていることが目的です。

libmemcached

libMemcached

コンパイル

cd /usr/local/src/
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar xzf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make
make install

自分の環境ではgcc-c++がはいっていなかったためyumで先にインストールする必要がありましたが、インストール自体は難しくはありませんでした。

php-memcachedコンパイル

cd /usr/local/src
git clone -b php7 https://github.com/php-memcached-dev/php-memcached.git
cd php-memcached
phpize
./configure --with-libmemcached-dir=/usr/local/
make
make install

反映されているかの確認

PHPで利用する場合はphp.iniにてmemcached.soをよみこんでいるはずのため、phpinfoからバージョンが確認できます。

phpinfoでみたときにmemcached versionが「1.0.18」になっていれば大丈夫だと思います。

個人環境ではこれで早くなりました。

発生したときは正直検討が付かない部分でしたが、実際にその状況になるとこういう場合もあるのかとちょっと困惑しました。

やっぱり難しいですね。