Memcached

memcachedとは



memcachedは、汎用的な分散型インメモリキャッシュシステムです。元々はDanga InteractiveによってLiveJournalサービスのために開発されましたが、現在では多くのWebサイトで利用されています。主な目的は、データやオブジェクトをメモリ内にキャッシュすることで、データベースへのアクセス回数を減らし、Webサイトのパフォーマンスを向上させることです。memcachedは、BSDライセンスの下で配布されるオープンソースソフトウェアです。

memcachedの仕組み



memcachedは、適切に設定されたファイアウォールで保護されたサーバー環境での使用を推奨します。もしファイアウォールがない環境で使用する場合は、SASL認証オプションを有効にしてコンパイルする必要があります(バージョン1.4.3以降)。デフォルトでは、ポート11211番を使用し、イベント処理にはlibeventライブラリを使用します。

memcachedは、複数のマシンに分散された巨大なハッシュテーブルを提供します。このハッシュテーブルが満杯になると、最も古いデータから順に削除され、新しいデータが挿入されます。アプリケーションは、データベースのような低速なストレージへのアクセスを行う前に、memcachedにリクエストを行います。

memcachedの利用事例



memcachedは、YouTube、LiveJournal、Wikipedia、SourceForge、FacebookDigg、Fotologなど、数多くの大規模なWebサイトで利用されています。これらのサイトでは、memcachedを利用することで、大量のアクセスを効率的に処理し、高速な応答を実現しています。

サンプルコード



データベースやオブジェクト生成のクエリをmemcachedを利用するように変更するのは比較的簡単です。
以下に、単純なデータベースクエリを例に、memcachedを使用する場合としない場合のコードを比較してみましょう。

memcachedを使用しない場合




function get_foo (int userid) {
result = db_select("SELECT FROM users WHERE userid = ?", userid);
return result;
}


このコードは、useridをキーとしてデータベースからユーザー情報を取得する関数です。

memcachedを使用する場合




function get_foo (int userid) {
result = memcached_fetch("userrow:" + userid);
if (!result) {
result = db_select("SELECT FROM users WHERE userid = ?", userid);
memcached_add("userrow:" + userid, result);
}
return result;
}


このコードでは、まずmemcachedから"userrow:userid"というキーに対応するデータを取得します。もしデータが見つからなければ、データベースからユーザー情報を取得し、取得したデータをmemcachedに追加します。

データ更新時の注意点



`get_foo`関数だけを変更しても、データベースの更新を行う部分を変更しないと、memcachedに古いデータがキャッシュされたままになる可能性があります。そのため、データの更新時にはmemcachedの`set`関数を使用する必要があります。


function update_foo(int userid, string dbUpdateString) {
result = db_execute(dbUpdateString);
if (result) {
data = createUserDataFromDBString(dbUpdateString);
memcached_set("userrow:" + userid, data);
}
}


このコードでは、データベースの更新が成功した場合、memcachedのデータを最新の状態に更新しています。

キャッシュの無効化



別の方法として、memcachedの`delete`関数を使用してキャッシュを無効化することも可能です。これにより、次回のリクエスト時にキャッシュミスが発生し、データベースから最新のデータを取得するようになります。

まとめ



memcachedは、Webアプリケーションのパフォーマンスを向上させるための強力なツールです。適切な設定と利用方法を理解することで、Webサイトの応答速度を大幅に改善することができます。

公式リンク



memcached 公式ウェブサイト

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。