キャッシュで高速化 (インストール)
2015年8月01日
nomura
はじめまして、エンジニアの野村です。
最近、暑くなって満員電車が憂鬱ですね……離島か田舎で仕事をしたいものです。
今回はウェブサイトの高速化を実現する技術のキャッシングについて浅い知識を披露したいと思います。
キャッシングと言ってもいろいろと実装方法があるのですが、サーバーの揮発メモリを使用した memcached を PHP から利用したいと思います。
memcached は連想配列のようにキーと値を揮発メモリ上に保存し、高速に読み書きができるものです。もちろん揮発メモリなのでサーバーを再起動すると消えてしまいますが、ファイルやデータベースよりも圧倒的に高速なので利用価値は高いと思います。
ウェブサイトでの主な使用法としては、
・データベースのキャッシュ
・セッションの保存
などが挙げられます。
データベースは更新の少ないマスタ系のデータをキャッシュするとアクセスを減らせて高速化できそうですね。
また、名前の通り memcached はデーモンとして動作するので、他のサーバーで動作させることも可能です。ウェブサーバーを冗長化した場合は、セッションを一元管理しなければならないので、 memcached はお手軽な解決方法になりますね。
それでは、早速 memcached をインストールしてみましょう。
ちなみにサーバーは下記の環境で試しています。
・CentOS Linux release 7.1.1503 (Core)
・Apache/2.4.6 (CentOS)
・PHP 5.6.11 (cli)
memcached のインストール
yumコマンドから memcached をインストールします。
# yum install memcached memcached-devel libmemcached libmemcached-devel
この際に依存インストールで、イベントハンドリングライブラリ libevent がインストールされます。
インストールが終わったら起動と自動起動設定を行います。
# systemctl start memcached # systemctl enable memcached
プロセスに「/usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024」があれば、インストール成功です。実に簡単ですね。
設定ファイルは /etc/sysconfig/memcached にインストールされていますので、必要に応じてポート番号、メモリ量、コネクション数を調整しましょう。
PECL 拡張モジュールのインストール
次に PHP から memcached を利用するために、Memcached という PECL 拡張モジュールをインストールします。
PECL 拡張モジュールは下記のようなコマンドでインストールするのですが、今回の環境ではインストール時にSASL 認証関連のエラーが発生してしまいました。
# pecl install memcached
そこで、ソースファイルをダウンロードしてコンパイルしてみました。分かり難いのですが、PHP の公式ドキュメントにある「–enable-memcached-sasl スイッチ」は libmemcached のコンパイルオプションではなく、PECL 拡張モジュールのコンパイルオプションです。
まず memcached-2.2.0.tgz ファイルをダウンロードし解凍します。
# wget http://pecl.php.net/get/memcached-2.2.0.tgz # tar -zxf memcached-2.2.0.tgz
つぎに phpize コマンドで autoconf が必要となりますので、autoconf をインストールします。
# yum install autoconf
ソースファイルを SASL 認証の無効化オプション「–disable-memcached-sasl」付きでコンパイルし、サーバーにインストールします。
# cd memcached-2.2.0 # phpize # ./configure --disable-memcached-sasl # make # make install
インストールした拡張モジュールを読み込ませるために、php.ini に「extension=memcached.so」追記します。
# vi /usr/local/lib/php.ini
最後にウェブサーバーを再起動してインストール完了です。
# systemctl restart httpd
phpinfo で下記のように表示されれば使用する準備が整いました。
# php -i | grep memcached memcached memcached support => enabled libmemcached version => 1.0.16 memcached.compression_factor => 1.3 => 1.3 memcached.compression_threshold => 2000 => 2000 memcached.compression_type => fastlz => fastlz memcached.serializer => php => php memcached.sess_binary => 0 => 0 memcached.sess_connect_timeout => 1000 => 1000 memcached.sess_consistent_hash => 0 => 0 memcached.sess_lock_expire => 0 => 0 memcached.sess_lock_max_wait => 0 => 0 memcached.sess_lock_wait => 150000 => 150000 memcached.sess_locking => 1 => 1 memcached.sess_number_of_replicas => 0 => 0 memcached.sess_prefix => memc.sess.key. => memc.sess.key. memcached.sess_randomize_replica_read => 0 => 0 memcached.sess_remove_failed => 0 => 0 memcached.store_retry_count => 2 => 2 Registered save handlers => files user memcached
次回は実際に PHP から memcached を使用してみたいと思います。