Blog
Blog

Blog

キャッシュで高速化 (インストール)

2015年8月01日

nomura

linux interface screen notebook and world map ubuntu style

はじめまして、エンジニアの野村です。
最近、暑くなって満員電車が憂鬱ですね……離島か田舎で仕事をしたいものです。

今回はウェブサイトの高速化を実現する技術のキャッシングについて浅い知識を披露したいと思います。

キャッシングと言ってもいろいろと実装方法があるのですが、サーバーの揮発メモリを使用した 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 を使用してみたいと思います。