22

私は環境でmemcachedを理解しようとしています(そしておそらくデプロイしようとしています)。

PHPで開発された大きなウェブアプリを実行しているロードバランサー上に4つのウェブサーバーがあります。すでにAPCを使用しています。memcachedがどのように機能するかを見たいですか?少なくとも、キャッシングがどのように機能するのか理解していないのかもしれません。

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

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

4

3 に答える 3

26

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

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));

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

于 2012-04-13T05:09:10.150 に答える
1

memcacheがどのように機能するかについてはいくつかの例があります。これがリンクの1つです。

次に、MemcacheはMySQLの有無にかかわらず動作します。

PHPにあるオブジェクトをキャッシュします。これは、MySQLからのものか、それ以外の場所からのものかを問わず、PHPオブジェクトの場合はMemCacheに保存できます。

APCは、Memcacheよりも多くの機能を提供します。PHPオブジェクトの保存/キャッシュの他に、PHPファイルがメモリにロードされるプロセスを経ないようにPHP-executable-machine-readable-opcodesをキャッシュします-> Comileedではなく、コンパイル済みのオペコードを直接実行しますメモリから。

于 2012-04-13T04:55:01.803 に答える
1

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

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

于 2012-04-13T06:37:44.803 に答える