2017-07-04 7 views
1

私の理解によると。 Memcacheのメモリ全体でMemcache退去ポリシー

  1. は、固定サイズのページに分割され、各ページは、粒子スラブclass.Eachページに属し、さらに固定サイズのチャンクに分割され、チャンクのサイズは、スラブclass.Dataに従って決定され記憶されています(内部の断片化を最小限に抑えるために)それに最も適したチャンクです。

  2. Memcacheは、退去のためにLRU戦略を使用します。 (別のクラスの)フレームは無料ですが、まだ立ち退きがフレームに起こっている場所

がどこかに私はLRU戦略ではなく、全体data.Soのフレームに適用されていることを読んだことが、場合があることができます。

これはmemcacheの動作の仕組みですか?退去する代わりに、空のフレームのチャックのサイズを変更する必要がありますか?

答えて

0

説明したように、メモリは固定サイズのページ(1MBまたは最大アイテム構成サイズ)で分割され、各ページは粒状スラブクラスに属します。当初、これらのページは実際に特定のスラブクラスに割り当てられていません。リクエストが来ると、サイズ範囲ごとにスラブクラスが作成され、ページがそれらに添付されます。

最適なスラブクラスを特定することが重要です。そのアルゴリズムはおおよそ次のようになります。

  1. テールページ(このスラブクラスの最後に割り当てられたページ)で、開いている/空いているチャンクがあるかどうかを確認します。
  2. 見つかった場合は、このオブジェクトをそのページに格納して戻ります。
  3. それ以外の場合は、未割り当てのページを見つけて、このスラブクラスに割り当てます。
  4. 割り当てられていないページがない場合(これはすべてのメモリが完全にいっぱいであるとは限りません)、LRUロジックを使用して、使用されていない(または期限切れの)チャンクを解放します。
  5. このオブジェクトは、解放されたチャンク(手順4)または空のページ(手順3)のいずれかに格納します。

今、あなたの質問にお答えします。

すべてのページが一部のスラブクラスに割り当てられている場合にのみ、エビクションが発生します。以来、すべてのページはいくつかのスラブクラスにバインドされ、そのサイズ範囲内のオブジェクト/アイテムを受け入れる準備ができています。残りの空きメモリは、他のサイズのオブジェクトには使用できません。つまり、サイズ変更することはできません。これは簡単にするために実装されています。このメソッドは、オブジェクトのサイズがクエリ結果、レンダリングされたhtmlページとほぼ同じサイズである多くのWebアプリケーションに最適です。その場合、Memcacheは使用しているクラスをほとんど使用しないで、すべてのページを割り当てます。

私はどこかで読んでいたことを覚えています。このサイズのメモリのサイズは、Redisがより柔軟です。

希望すると助かります!

関連する問題