web-dev-qa-db-ja.com

MySQLのmemcacheはどのように機能しますか?

私の環境でmemcachedを理解しようとしています(そしておそらく展開します)。

PHPで開発された大きなWebアプリを実行するロードバランサーに4つのWebサーバーがあります。すでにAPCを使用しています。 memcachedの動作を確認したいですか?少なくとも、キャッシングの仕組みがわからないのかもしれません。

複数のテーブルを組み合わせてデータを取得する複雑な動的クエリがあります。毎回、データは異なるクライアントデータベースからのものであり、データは変化し続けます。私の理解では、一部のデータがキャッシュに保存されていて、リクエストが次回同じである場合、同じデータが返されます。 (または私はここで完全に間違っているかもしれません)。

このmemcache全体(または、さらに言えば、キャッシングなど)はどのように機能しますか?

22
Kevin Rave

キャッシュは、一般に、非常に高速なキー/値ストレージエンジンであり、事前に定義されたキーによって値(通常はシリアル化)を格納できるため、格納された値を同じキーで取得できます。

MySQLに関連して、データベースにリクエストを発行する前に、キャッシュ内のデータの存在を確認するような方法でアプリケーションコードを記述します。一致が見つかった場合(一致するキーが存在する場合)、キーに関連付けられているデータにアクセスできます。目標は、回避できる場合は、よりコストのかかるデータベースにリクエストを発行しないことです。

例(説明のみ):

$cache = new Memcached();

$cache->addServer('servername', 11211);

$myCacheKey = 'my_cache_key';

$row = $cache->get($myCacheKey);

if (!$row) {

    // Issue painful query to mysql
    $sql = "SELECT * FROM table WHERE id = :id";

    $dbo->prepare($sql);
    $stmt->bindValue(':id', $someId, PDO::PARAM_INT);

    $row = $stmt->fetch(PDO::FETCH_OBJ);

    $cache->set($myCacheKey, serialize($row));
}

// Now I have access to $row, where I can do what I need to
// And for subsequent calls, the data will be pulled from cache and skip
// the query altogether
var_dump(unserialize($row));

詳細については、PHP docs on memcached を確認してください。いくつかの良い例とコメントがあります。

26
Mike Purcell

Memcacheの動作にはいくつかの例があります。 ここ はリンクの1つです。

次に、MemcacheはMySQLがあってもなくても機能します。

これは、PHPにあるオブジェクトをキャッシュします。これは、MySQLに由来するかどうかに関係なく、PHPオブジェクトの場合、MemCacheに保存できます。

APCはMemcacheよりも多くの機能を提供します。 PHPオブジェクトを格納/キャッシュする以外に、PHP = executable-machine-readable-opcodesもキャッシュして、PHPファイルがプロセスを通過しないようにしますメモリにロードする方法-> Comiledされているのではなく、すでにコンパイルされているオペコードをメモリから直接実行します。

1
linuxeasy

データが(リクエスト間で)変化し続ける場合、そのデータは古くなるため、キャッシュは無駄です。しかし、ほとんどの場合(私はあなたのキャッシュでも)データベースへの複数の要求は同じデータセットをもたらし、その場合(メモリ内の)キャッシュは非常に役立ちます。

PS:私は簡単なグーグル検索をして、かなり良い品質のmemcachedに関するこのビデオを見つけました=> http://www.bestechvideos.com/2009/03/21/railslab-scaling-Rails-episode-8 -memcached 。唯一の問題は、それがRuby on Rails(これもあまり使用しませんが、非常に理解しやすい)について話していることです。)うまくいけば、概念を理解するのに役立つでしょう少し良く。

1
Alfred