2011-02-05 15 views
6

私はmemcachedのような解決方法が必要なのか理解しようとしています。それは愚かな質問のように見えるかもしれませんが、必要なものがオブジェクトをキャッシュするだけであればテーブルに何がもたらされますか?単純なハッシュマップはありませんか?なぜmemcachedですか?

答えて

3

、memcacheのは、自然の中で一般的な...

無料&オープンソース、高性能、 分散メモリオブジェクトキャッシュ システム、ですが、 動的なWebを高速化での使用を目的と データベース負荷を軽減する。

Memcachedのデータベース呼び出し、API呼び出し、またはページ レンダリングの結果 から任意のデータ(文字列、オブジェクト)の小さなチャンクのためにメモリ内のキー値 店です。 Memcachedはシンプルでありながら、強力な です。その単純な設計は、 の迅速な展開、容易な開発、 を促進し、大きな データキャッシュに直面する多くの問題を解決します。そのAPIは、最も一般的な言語の で利用できます。ここ

心臓部には、それは簡単なキー/値 店

あるキーワードはを配布しています。一般的に、memcacheサイトから再び引用すると、

memcachedサーバーは、一般的に互いに認識されません。 です。 クロストークはありません。同期なし、 ブロードキャストありません。 相互接続の欠如は、多くの場合、 を追加することを意味します。サーバーは通常、予想通りに容量を追加します。 このルールには の例外がありますが、例外は であり、注意深く考慮されています。

detailed description of memcacheを読むことを強くおすすめします。

+2

"分散メモリオブジェクトのキャッシュ"を解析する際に問題があります...分散されているものは何ですか?私はただ1つのWebサーバーを持っている場合、何をmemcachedはハッシュマップとは対照的に提供しています...私はそれが綴りが必要なようです:( – treefrog

2

ここで、このハッシュマップを配置しますか?それがあなたのためにやっていることです。 PHPで実装する構造体は、リクエストが終了するまでそこにのみ存在します。永続的なキャッシュに物を投げた場合、データを再構築するのではなく、他の要求のために戻すことができます。

+0

これは、PHPのため、だけでなく、セッションベースのストレージを提供しません、他のWebテクノロジのためだけではありません... – treefrog

+0

@Danグロスマン私たちの場合:ここで

は、物品の試験の結果は、ファイルごとに1つのオブジェクトを格納する "ストア"ディレクトリを手動で作成します(ネイティブのphp serialize/deserialize関数を使用してこれらのオブジェクトを設定/取得します)。すべてのオブジェクトには、開発者が選択したキー(ファイル名)を使用してアクセスできます。約200のオブジェクトについては、それがmemcachedより速いかどうか知っていますか? – ling

1

完全フラグ設定されたキャッシュシステムを使用すると、多くのサーバーでキャッシュを複製することができます。多くのサーバーにスケーリングするだけで多くの並列要求がスケーリングされます。 memcache web siteから引用

2

この質問はかなり古いですが、複数のサーバー間でキャッシュを共有できることに加えて、他の回答では言及されていない値の有効期限もあります。

値をHashMapに格納し、そのHashMapがアプリケーションコンテキストにバインドされている場合、項目を期限切れにしない限り、値は拡大し続けます。 Memcachedは、パフォーマンスを最大限に引き出すためにオブジェクトを遅延させます。

アイテムがmemcacheに追加されると、有効期限(600秒など)が設定されます。オブジェクトが期限切れになった後は、そのまま残りますが、別のオブジェクトがそれを要求した場合は、それをパージしてnullを返します。

同様に、memcachedメモリがいっぱいになると、適切なサイズの最初に期限切れのアイテムが検索され、新しいアイテムのための空き領域が確保されます。最後に、キャッシュがいっぱいで期限切れのアイテムがない場合もあります。その場合は、最も使用されていないアイテムが置き換えられます。

0

PHPが使用するさまざまなキャッシュシステムを比較する(古い)の記事があります: https://www.percona.com/blog/2006/08/09/cache-performance-comparison/

基本的には、ファイルのキャッシュがmemcachedのよりも高速です。

質問に答えるには、ファイルベースのキャッシュシステムを使用する方がよいでしょう。

Cache Type        Cache Gets/sec 
Array Cache        365000 
APC Cache        98000 
File Cache        27000 
Memcached Cache (TCP/IP)    12200 
MySQL Query Cache (TCP/IP)    9900 
MySQL Query Cache (Unix Socket)   13500 
Selecting from table (TCP/IP)   5100 
Selecting from table (Unix Socket)  7400 
関連する問題