0

私は Terracotta を初めて使用し、分散キャッシングのために EHcache をインストールして適切に動作させましたが、今得ているものは私が本当に望んでいるものではありません。私のアプリケーションでは、ehcache を使用して複数のクライアント キャッシュ (L1) を作成し、クライアントから削除されたキーの無効化を他のすべてのクライアントに「伝達」したいと考えています。キャッシュをテラコッタ サーバーにも常駐させたくないので、単純に L2 キャッシュを無効にして、オブジェクトをシリアル化する必要がないようにします (キャッシュで実行されるアクションは PUT と REMOVE のみです)。 . これは単に ehcache を使用して実行できることはわかっていますが、私の環境 (Amazon EC2) ではマルチキャストがサポートされておらず、クライアントは自動スケーリング機能を使用して自動的に作成されるため、クライアントの IP を知ることができません。だから基本的に、Terracotta サーバーは、無効化要求をすべてのクライアントに伝達するためだけに必要です。これを達成する方法はありますか?どうもありがとう!

4

1 に答える 1

0

Terracotta に裏打ちされた EhCache を使用し、キャッシュ構成で Terracotta を使用するように指定する場合は、次のようになります。

<cache name="com.xyz.MyPOJO"
  <terracotta/>
</cache>

次に、クラスをシリアライズ可能にする必要があります (Terracotta がキャッシュ サーバー インスタンスに格納しようとするため)。

ただし、構成では、一部のキャッシュに Terracotta を使用しないように指定できます。

<cache name="com.xyz.MyPOJO"
  <terracotta/>
</cache>

<cache name="com.xyz.NotServerStoredPOJO"
</cache>

次に、上記の例の「NotServerStoredPOJO」はテラコッタキャッシュサーバーに保存されません...代わりに、ローカルのEhCacheにのみ存在します...しかし、そうすることで、他のインスタンスに伝播することができなくなります差分 JVM の EhCache。

したがって、何を無効にするかを示すもの (ある種のフラグ/ID) をテラコッタ サーバーに保持する必要があるかもしれません。次に、アプリケーションコードに、ローカルEhCacheから値を取得する前にそのフラグをチェックする共通のクラス/機能があります...削除するフラグ/ IDが見つかった場合、ローカルキャッシュから削除され、何も返されません依頼者へ。

一方、ユースケースの種類は、中央キャッシュサーバーを持つ目的を無効にします。中央に配置せずに複数のキャッシュ インスタンスを調整する場合は、JGroups http://www.jgroups.org (Terracotta の代わりに)を使用できます...商用ライセンスも無料です。ただし、ローカル EhCache インスタンスの特定のエントリを無効にする方法について、JGroups に独自のメカニズムを実装する必要があります...

于 2012-09-27T19:00:36.333 に答える