ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由:
Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達しました and no longer receives security patches or updates. This guide is no longer maintained.

代わりに参照してください:
このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

Memcacheについて

Memcacheは、サーバー情報をキャッシュすることで仮想プライベートサーバーを高速化するために機能するシステムです。 このプログラムを使用すると、最近クエリされたデータを特定の時間キャッシュするために、特定の量のサーバーRAMを割り当てることができます。 データが再度要求されると、memcacheは、データベースから結果を生成する代わりに、キャッシュされた情報を表示することにより、データを取得するプロセスを高速化します。

設定

このチュートリアルの手順では、ユーザーがroot権限を持っている必要があります。 設定方法は、基本ユーザーチュートリアルで確認できます。 始める前に、apt-getを更新して、VPSにダウンロードするすべてのパッケージが最新であることを確認することをお勧めします。

sudo apt-get update

さらに、仮想サーバーにMySQLとPHPをインストールする必要があります。

sudo apt-get install mysql-server php5-mysql php5 php5-memcache

Memcacheをインストールします

memcacheのインストールにはいくつかの手順があります。

開始するには、apt-getを介してmemcachedをインストールします。

sudo apt-get install memcached

次のステップは、memcacheを保存するリポジトリであるphp-pearをインストールすることです。

sudo apt-get install php-pear

サーバーにコンパイラがない場合は、memcacheをインストールするためにbuild-essentialをダウンロードできます。

sudo apt-get install build-essential

最後に、PECL(PHP Extension Community Library)を使用してmemcacheをインストールします。

sudo pecl install memcache

「memcacheセッションハンドラーのサポートを有効にしますか?」というメッセージが表示されたら、インストール中にEnterキーを押して「はい」と答えます。 [はい] :”

VPSへのPECLを使用したmemcacheのインストールが完了したら、memcachedをmemcache.iniに追加します。

echo "extension=memcache.so" | sudo tee /etc/php5/conf.d/memcache.ini

これで、Memcacheの使用を開始する準備が整いました。

Memcacheを確認し、統計を参照してください

Memcacheがダウンロードされたら、それを検索してインストールされていることを確認できます。

ps aux | grep memcache

さらに、次のように入力すると、memcacheの統計情報を確認できます。

echo "stats settings" | nc localhost 11211

ステップ3—Memcacheの仕組み

Memcacheは、サーバーのデータベースにクエリを実行する前に、最初にキャッシュからデータを取得しようとするようにコードをリダイレクトすることで機能します。 キャッシュは、最近取得したサーバーデータを一定期間保存することで作成されます。 最近要求された情報をキャッシュすることにより、将来のクエリはデータベースから情報を取得するためのより長いプロセスを経る必要がなく、代わりにキャッシュを介して情報にアクセスできます。

memcacheページには、memcacheプロセスを要約するために、ホームページにこの省略されたコードが表示されます。

function get_foo(foo_id)
    foo = memcached_get("foo:" . foo_id)
    return foo if defined foo

    foo = fetch_foo_from_database(foo_id)
    memcached_set("foo:" . foo_id, foo)
    return foo
end

簡単なMemcacheの例

このセクションでは、mysqlテーブルで最初に見つかった単一の値を取得するためにmemcacheを使用する簡単なphpスクリプトを設定します。

次の手順では、適切なデータベースにアクセスできるmysqlユーザーを設定し、クエリするテーブルを作成して、テストする1つの値を新しいmysqlテーブルに挿入します。

mysqlにログインします:mysql -u root -pそして、次のコマンドを実行します:

use test;

grant all on test.* to test@localhost identified by 'testing123';

create table example (id int, name varchar(30));

insert into example values (1, "new_data");

exit;

MySQLを終了したら、memcacheスクリプトファイルを作成します。

nano memtest.php

次に、phpスクリプトを段階的に作成します(スクリプト全体がセクションの最後にあります)。

  • まず、memcacheのデフォルトポートである11211で実行されるmemcacheとの新しい永続的な接続を作成します。
    <?php
    $meminstance = new Memcache();
    $meminstance->pconnect('localhost', 11211);
  • 次のステップは、前に作成したユーザー
    mysql_connect("localhost", "test", "testing123") or die(mysql_error());
    mysql_select_db("test") or die(mysql_error());

    を使用して、新しいmysqlデータベースに接続することです。

  • その後、先に進んでサーバーに提示するクエリを作成し、その特定のアクションを識別するためのキーを提供します:
    $query = "select id from example where name = 'new_data'";
    $querykey = "KEY" . md5($query);
  • スクリプトは最初にキャッシュを検索して、クエリに対する回答を探します。 結果が存在しない場合、スクリプトは質問を元のデータベースに再ルーティングします。 元のデータベースがクエリに応答すると、スクリプトは「set」コマンドを使用して結果をmemcacheに保存します。これにより、クエリが保存され、ユーザーはキャッシュに保持する秒数(600)を指定できます。 10分間キャッシュに保存します)。 スクリプトを初めて実行すると、データがmysqlデータベースから収集されたことが通知されます。 ただし、その際、情報はキャッシュに保存されるため、スクリプトを2回実行すると、キャッシュから情報が取得され、ユーザーに通知されます。

    10分後にキャッシュがもう一度空になり、スクリプトを実行すると、データベースにもう一度アクセスできるようになります。

    $result = $meminstance->get($querykey);
    
    if (!$result) {
           $result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
           $meminstance->set($querykey, $result, 0, 600);
    print "got result from mysql\n";
    return 0;
    }
    
    print "got result from memcached\n";
    return 0;
    
    ?>

全体として、スクリプトは次のようになります。

<?php
$meminstance = new Memcache();
$meminstance->pconnect('localhost', 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

$query = "select id from example where name = 'new_data'";
$querykey = "KEY" . md5($query);

$result = $meminstance->get($querykey);

if (!$result) {
       $result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
       $meminstance->set($querykey, $result, 0, 600);
print "got result from mysql\n";
return 0;
}

print "got result from memcached\n";
return 0;

?>

コマンドラインでスクリプトを実行すると、次の結果が得られます。

# php memtest.php 
got result from mysql

# php memtest.php 
got result from memcached

# php memtest.php 
got result from memcached

結論

このチュートリアルでは、データベースをmemcacheに接続することにより、データベースからのデータの取得を高速化する方法について説明します。 ただし、memcacheの強度は、データストアではなくキャッシュであるという事実に由来することに注意してください。 memcacheを使用する場合、データベースの代わりになるとは思わないでください。 memcacheは特定のキーに対して設定された期間だけ値を保持するため、キャッシュする必要のある情報が常に見つかるとは限りません。このような場合は、元のサーバーデータベースを用意する必要があります。

それでも、memcacheは非常に便利なプログラムであり、サーバーの効率を上げるために多くのことを実行できます。

Memcacheについて他に質問がある場合は、フォーラムで詳細についてお気軽にお問い合わせください。

EtelSverdlov著