働きたくないゆとりの備忘録

プログラミングとかサーバーとか学んだことをいろいろ書いていきたい。。。

CentOS 7にMemcached最新版をインストールしてPHPと連携する

スポンサーリンク

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');
?>

作ったプログラムにブラウザからアクセスすると文字がちゃんと表示されます。
f:id:webhack:20150506032329p:plain


次に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で使えるようになりました。
実際にはさらにチューニングなどが必要ですが、使えるようになれば出来る事の幅がかなり広がりそうです。