» www.Giftbox.Az - Bir birindən gözəl hədiyyə satışı
ウィキペディアランダム
毎日カテゴリ
共有: WhatsappFacebookTwitterVK

memcached

memcached は、汎用の分散型メモリキャッシュシステムである。

memcached
開発元 (Danga Interactive)
最新版 1.6.9 - 2020年11月21日 (2年前) (2020-11-21)[1] [±]
リポジトリ
  • github.com/memcached/memcached
対応OS クロスプラットフォーム
種別 分散型メモリキャッシュシステム
ライセンス BSDライセンス
公式サイト memcached.org
(テンプレートを表示)

概要

もともと Danga Interactive によって LiveJournal サービスのために開発されたが、現在は多数のサイトで利用されている。memcached は、データとオブジェクトをメモリ内にキャッシュすることでデータベースから読み出しを行う回数を減少させ、データベースを用いた Web サイトを高速化するために良く用いられる。memcachedはパーミッシブ・ライセンスであるBSDライセンスに従い頒布されている[2]

memcached は適切に設定されたファイアウォールを用いるサーバ上で使用するか、そうでない場合はSASL認証のオプション付きでコンパイルしたものを使用できる(1.4.3以降)。既定では、memcached はポート 11211 番を使用する。また、(libevent) を使用している。

memcached の API は、複数のマシン上に分散された巨大なハッシュテーブルを提供する。テーブルがいっぱいの場合、以降のデータの新規挿入により古いデータはLeast Recently Used 順序で削除される。memcached を用いるアプリケーションは、背後にあるデータベースなどの低速な記憶装置へのアクセスの前に memcached のリクエストを挿入する。

memcached のシステムは、YouTube [3]LiveJournalWikipediaSourceForgeFacebookDigg、Fotologなどの大規模な有名サイトで使用されている[4]

サンプルコード

データベースやオブジェクト生成のクエリーを memcached を使うよう変更することは簡単である。 単純なデータベースのクエリーを用いた場合、サンプルコードは下記のようになる。(以下の例は全て擬似コードである。memcached の処理やプログラミング言語は、使用する API により異なる。)

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 を呼び出しキーを追加する。

しかし get_foo 関数のみが変更され、DBに対して更新が実行される部分が変更されなければ get_foo は誤ったデータを取り出すことになる。従って 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 関数で無効にし、以降のデータの取り出しがキャッシュミスとなるようにする方法もある。

脚注

  1. ^ “Releases”. GitHub. 2020年12月31日閲覧。
  2. ^ “Licence of memcached”. 2008年4月13日閲覧。
  3. ^ Cuong Do Cuong (Engineering manager at YouTube/Google) (2007年6月23日). Seattle Conference on Scalability: YouTube Scalability (Online Video - 26th minute). Seattle: Google Tech Talks. http://www.youtube.com/watch?v=ZW5_eEKEC28 
  4. ^ Who's using memcached?[]

外部リンク

  • 公式ウェブサイト
ウィキペディア、ウィキ、本、library、論文、読んだ、ダウンロード、自由、無料ダウンロード、mp3、video、mp4、3gp、 jpg、jpeg、gif、png、画像、音楽、歌、映画、本、ゲーム、ゲーム。