memcached
出典: フリー百科事典『ウィキペディア(Wikipedia)』
| Memcached | |
|---|---|
| 開発元 | Danga Interactive |
| 最新版 | 1.4.0 / 2009年7月9日 |
| 対応OS | クロスプラットフォーム |
| 種別 | 分散型メモリキャッシュシステム |
| ライセンス | BSDライセンス |
| 公式サイト | http://www.danga.com/memcached/ |
memcached は汎用の分散型メモリキャッシュシステムである。 もともと Danga Interactive によって LiveJournal サービスのために開発されたが、現在は多数のサイトで利用されている。memcached は、データとオブジェクトをメモリ内にキャッシュすることでデータベースから読み出しを行う回数を減少させ、データベースを用いた Web サイトを高速化するために良く用いられる。memcached はpermissive free software licence によりライセンスされている。[1]
memcached は認証やセキュリティの機能を持っておらず、 すなわち適切に設定されたファイアーウォールを用いるサーバ上でのみ使用できる。 既定では、memcached はポート 11211 番を使用する。また、libevent を使用している。
memcached の API は、複数のマシン上に分散された巨大なハッシュテーブルを提供する。テーブルがいっぱいの場合、以降のデータの新規挿入により古いデータはLeast Recently Used 順序で削除される。memcached を用いるアプリケーションは、背後にあるデータベースなどの低速な記憶装置へのアクセスの前に memcached のリクエストを挿入する。
memcached のシステムは、YouTube [2] やLiveJournal、Wikipedia、SourceForge、Facebook、Digg、Fotologなどの大規模な有名サイトで使用されている([3]参照)。
目次 |
[編集] サンプルコード
データベースやオブジェクト生成のクエリーを memchached を使うよう変更することは簡単である。 単純なデータベースのクエリーを用いた場合、サンプルコードは下記のようになる。
function get_foo (int userid) {
result = db_select("SELECT * FROM users WHERE userid = ?", userid);
return result;
}
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" が存在するかどうかの確認を行う。 存在しないという結果であれば、通常のようにデータベースに select を要求し、memcached の add API を呼び出しキーを追加する。
しかし、この関数のみが変更され、その他の部分が変更されなければ、サーバは誤ったデータを取り出すことになる(データベース全体がメモリのキャッシングに収まらないと仮定すれば)。従って add の呼び出しに加えて、memcached の set 関数を用いた更新の処理も必要になる。
function update_foo(int userid, string dbUpdateString) {
result = db_execute(dbUpdateString);
if (result) {
data = createUserDataFromDBString(dbUpdateString);
memcached_set("userrow:" + userid, data);
}
}
この処理はデータベースのクエリーが成功すると仮定して現在のキャッシュのデータをデータベースの新しいデータと合致するよう更新する。異なるアプローチとして、memcached のキャッシュを delete 関数で無効にし、以降のデータの取り出しがキャッシュミスとなるようにする方法もある。
本ページの例は全て擬似コードである。memcached の処理やプログラミング言語は、使用する API により異なる。
[編集] 参考文献
- ^ "Licence of memcached". 13,Apr 2008 閲覧。
- ^ Cuong Do Cuong (Engineering manager at YouTube/Google). Seattle Conference on Scalability: YouTube Scalability. [Online Video - 26th minute]. Seattle: Google Tech Talks.
- ^ Who's using memcached?
[編集] 外部リンク
[編集] 一般のサイト
[編集] クライアントライブラリ
- PHP
- Java
- Python
- Perl
- pure Ruby
- compiled Ruby
- Enyim.com .NET client
- BeIT .NET client
- ASP.NET cache and session provider
- Scheme
- new C reference implementation
- old C implementation
[編集] クライアントアプリケーション
- memcached in MediaWiki
- Univca - opensource C++ framework derived from memcached
- memcached storage engine for MySQL
- pgmemcache - API for PostgreSQL
- Memcached Functions for MySQL - API for MySQL
- memcachefs: a memcache filesystem using FUSE
- IPC::Lock::Memcached fast locking via memcached]

