WEBサービスにMySQLやPostgreSQLなどのデータベースを使うことは多いですが、アクセスが集中すると捌ききれなくなったり、一時的なデータのINSERTが頻繁にあると負荷が高くなったり問題がいくつかでてきます。
それを解決する一つの手段がMemcachedというソフトです。
Memcachedはメモリを使ったキャッシュシステムで、SELECTの結果を一時的にキャッシュしてデータベースの処理回数を減らしたり、セッションなどの一時的な情報をキャッシュしたりできます。
今回はMemcachedを導入してApacheやPHPと連携させてみます。
使用したOS
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
使用したApache
[root@localhost ~]# /usr/local/apache2/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: Apr 12 2015 03:53:10
使用したPHP
[root@localhost ~]# php -v PHP 5.6.8 (cli) (built: May 5 2015 05:30:25) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
環境構築
Memcachedをダウンロード
今回は1.4.24を使用します。
wget http://www.memcached.org/files/memcached-1.4.24.tar.gz -O memcached-1.4.24.tar.gz
Memcachedをインストール
tar xvf memcached-1.4.24.tar.gz cd memcached-1.4.24 yum -y install libevent-devel ./configure --enable-64bit make make install
libmemcachedをインストール
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar xvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make
make install
php-pecl-memcachedをインストール
MemcachedをPHPで使えるようにするモジュールをインストールします。
wget http://pecl.php.net/get/memcached-2.2.0.tgz tar xvf memcached-2.2.0.tgz cd memcached-2.2.0 yum -y install autoconf phpize ./configure --with-libmemcached-dir=/usr/local/ --disable-memcached-sasl make make install
PHPにモジュールを読み込ませる
php.iniを編集してMemcachedを使えるようにします。
vi /usr/local/lib/php.ini
下記を追記
extension=memcached.so
動作確認
[root@localhost memcached-1.4.24]# memcached -V memcached 1.4.24
バージョンが表示されればインストール完了です。
[root@localhost ~]# php -i | grep memcached memcached memcached support => enabled libmemcached version => 1.0.18 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 PWD => /usr/local/src/memcached-2.2.0 _SERVER["PWD"] => /usr/local/src/memcached-2.2.0
ちゃんとmemcachedが読み込まれてます。
Memcachedを起動
rootでは起動出来ないので他のユーザーに切り替えてから起動してください。
/usr/local/bin/memcached -p 11211 -m 64m -d
Memcachedを試す
テストするためにPHPでコードを書いてみます。
<?php $memcache = new Memcached(); $memcache->addServer('localhost', 11211); $data = 'MemcachedをPHPで使うテスト'; $memcache->set('key', $data, 1000); echo $get_data = $memcache->get('key'); ?>
作ったプログラムにブラウザからアクセスすると文字がちゃんと表示されます。
次にMemcachedのパッケージに含まれているmemcached-toolを使ってメモリ内のキャッシュを確認してみます。
[root@localhost ~]# /usr/local/src/memcached-1.4.24/scripts/memcached-tool localhost dump Dumping memcache contents Number of buckets: 1 Number of items : 1 Dumping bucket 2 - 1 total items add key 0 1430849134 33 MemcachedをPHPで使うテスト
ちゃんとセットした文字列がキャッシュされています。
これでMemcachedをPHPで使えるようになりました。
実際にはさらにチューニングなどが必要ですが、使えるようになれば出来る事の幅がかなり広がりそうです。
コメント