ECS Ubuntu 18.04上にPHPでMemcachedサーバを設定する


このガイドでは、ECS Ubuntu 18.04インスタンス上にMemcachedサーバを設定し、PHPコード上でMemcachedサーバを使用して操作を高速化する方法を紹介します。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

前提条件

始める前に、以下のものがあることを確認してください。

ステップ 1: Apache Web サーバのインストール

最初のステップは、Apache ウェブサーバをインストールすることです。Apacheがすでにサーバ上で実行されている場合は、このステップを省略しても構いません。Alibaba Cloud ECSインスタンスにSSHし、以下のコマンドを実行します。

$ sudo apt-get update 
$ sudo apt-get install -y apache2

Webサーバーがインストールされ、実行されたら、次はPHPをインストールします。

ステップ2: PHPのインストール

次に、以下のコマンドを実行してPHPをインストールします。前のステップと同様に、すでにシステム上でPHPが実行されている場合はインストールを省略しても構いません。また、以下のコマンドでは、ApacheウェブサーバとPHPを連携させるlibapache2-mod-phpモジュールをインストールします。

$ sudo apt-get install -y php libapache2-mod-php

次に、php-memcached 拡張モジュールをインストールします。このモジュールは、クライアント(PHPコードなど)にMemcachedサーバへのアクセスを提供します。

$ sudo apt-get install -y php-memcached

変更を反映させるために Apache を再起動します。

$ sudo systemctl restart apache2

PHP と Memcached 拡張モジュールがインストールされているので、次は Memcached サーバのインストールに移ることができます。

ステップ 3: Memcached サーバのインストールと設定

MemcachedパッケージはUbuntuのデフォルトのソフトウェアリポジトリにあるので、aptを使ってインストールします。また、libmemcached-tools もインストールします。これは、Memcachedサーバが使用する軽量なライブラリとツールのセットです。

Memcachedをインストールするには、以下のコマンドを実行します。

$ sudo apt-get install -y memcached libmemcached-tools

インストールしたら、nano テキストエディタで /etc/memcached.conf ファイルを修正することで、Memcached の設定を編集することができます。

$ sudo nano /etc/memcached.conf

Memcached が使用する設定のいくつかを見てみましょう。

-d : このオプションにより、Memcached をデーモンとして実行することができます。

logfile: Memcached はエラーとそのアクティビティをこのファイルに記録します。

-m : -m の後の値は、Memcached サーバが保持できる最大メモリを指定しますが、Memcached は最初に起動したときに合計メモリを保持しません。キャッシュサイズは、Alibaba Cloud ECSインスタンスで利用可能なRAMに応じて変更することができます。

-p : Memcachedは、このオプションで指定されたポートでリッスンします。デフォルト値は11211です。

-u : このオプションは、Memcached が実行されるユーザを指定します。デフォルト値は memcache です。

-i : Memcached サーバがリッスンする IP アドレスを指定します。Ubuntu 18.04サーバのデフォルト値はlocalhostで、IPアドレスは127.0.0.0.1に設定されています。

-c : このオプションを使用して、Memcachedサーバへの同時接続数を制限することができます。デフォルト値は1024です。

ファイルに変更を加えた場合は、以下のコマンドでMemcachedサーバを再起動する必要があります。

$ sudo systemctl restart memcached

その後、Apacheウェブサーバを再起動します。

$ sudo systemctl restart apache2

これでMemcachedサーバは期待通りに動作しているはずです。次のステップでは、簡単な PHP スクリプトを書いて、PHP が本当に Memcached サーバをサポートしているかどうかを確認します。

ステップ 4: Memcached のサポートを確認する

Memcached をインストールして設定したら、次は Apache ウェブサーバと PHP が Memcached を認識できるかどうかを確認します。

これを行うには、ウェブサイトのルートに info.php ファイルを作成します。

$ sudo nano /var/www/html/info.php

そして、以下の内容をファイルに貼り付けてください。

<?php
 phpinfo();
?>

CTRL+X、Y、Enterを押してファイルを保存します。

次に、Webブラウザで、以下のようにファイルパスにアクセスします。172.16.0.1をAlibaba Cloud ECSインスタンスに関連付けられたパブリック/インターネットIPアドレスに置き換えることを忘れないでください。

172.16.0.0.1/info.php

memcached のヘッダを見つけると、以下のような情報が表示されるはずです。これで、Memcached が PHP でサポートされていることが確認できます。

次に、以下のコマンドを実行して、Memcached サーバがサーバ上で期待通りに動作していることを確認します。

echo stats | nc 127.0.0.0.1 11211

以下のような出力が表示されます。

STAT pid 9493
STAT uptime 725
STAT time 1570086409
...
STAT moves_within_lru 0
STAT direct_reclaims 0
STAT lru_bumps_dropped 0
END

Memcached サーバが動作していることを確認したら、次は Memcached ライブラリを使用する PHP スクリプトを作成します。

ステップ 5: PHP スクリプトで Memcached をテスト

このステップでは、簡単なPHPスクリプトを作成し、Memcachedクラスを使用してデータをキャッシュします。nano テキストエディタを使って、ウェブサイトのルートに /var/www/html/test_memcached.php ファイルを作成します。

$ sudo nano /var/www/html/test_memcached.php

次に、下のPHPコードをファイルに貼り付けて、CTRL+X、Y、Enterを押して保存します。

<?php

try

{
    $memcached = new Memcached();
    $memcached->addServer("127.0.0.1", 11211); 
    $response = $memcached->get("sample_key");

    if($response==true) 
    {
      echo $response;
    } 

    else

    {
    echo "Cache is empty";
    $memcached->set("sample_key", "Sample data from cache") ;
    }
}
catch (exception $e)
{
echo $e->getMessage();
}
?>

Memcached サーバは、キーと値のペアを使用してキャッシュされたデータを保存します。上のコードは、PHP に Memcached クラスのインスタンスを作成し、IP アドレス 127.0.0.0.1 のサーバを 11211 ポート経由で追加するように指示しています。

次に、このコードは sample_key という名前のキーの値を取得しようとします。キーがサーバ上に存在する場合は、その値が返され、そうでない場合は、コードはキーを作成して、"Sample data from cache “という値を追加しようとします。

ブラウザ上のファイルパスにアクセスして、Memcachedの動作を確認してください。172.16.0.1をAlibaba ECSインスタンスに関連付けられたインターネットIPアドレスに置き換えます。

172.16.0.0.1/test_memcached.php

初めてコードを実行すると、以下のような出力が得られます。

次に、ページをリフレッシュして、今度はMemcachedが最初にコードを実行したときにキャッシュされた値を取得するはずです。

PHPでMemcachedを設定して使う方法については以上です。このコードを拡張して、データベースや外部のウェブソース (API など)、ファイルシステムからのデータをキャッシュすることができます。

結論

このガイドでは、Alibaba Cloud上でホストされているPHP Ubuntu 18.04サーバーでMemcachedを設定して使用する手順を説明しました。これは、WebサイトやWebアプリケーションのパフォーマンスを最適化するために使用できる数少ない技術の一つに過ぎません。また、Alibaba Cloud ECS上でMySQLクエリを速度とパフォーマンスのために最適化する方法についても読んでみてください。

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ