0

一度に JVM の 1 つのインスタンスのみがメモリ キャッシュ キー インスタンスを変更し、書き込み中に読み取りが行われないようにするにはどうすればよいでしょうか? 低レベルのストアまたは JSR ラッパーのいずれかを使用できます。

List<Foo> foos = cache.get("foos");
foos.add(new Foo());
cache.put("foos", foos);

同時書き込みなどから保護する方法はありますか?

ありがとう

4

2 に答える 2

1

Fh。ほぼ正しい方向に進んでいますが、完全ではありません。MemCache がアトミックに動作すると彼が言っているのは正しいですが、これによって「同期」を処理する必要がなくなります。JVM の実行例が多数あるため、マルチスレッド環境を考えるときに通常理解していることに関して、実際の同期について語ることはできません。1 つまたは複数のインスタンス間で MemCache アクセスを「同期」するソリューションは次のとおりです。

メソッドを使用して、オブジェクト インスタンスMemcacheService.getIdentifiable(Object key)を取得します。Identifiable後で MemCache に戻すことができます。MemcacheService.putIfUntouched(...)

MemCache APIで API を確認してください: getIdentifiable()。オブジェクトは、キーを介してフェッチしたIdentifiableオブジェクトを含むラッパーです。

仕組みは次のとおりです。

  • インスタンス A は識別可能な X を取得します。
  • インスタンス B は識別可能な X を「同時に」取得します
  • インスタンス A と B は、X のラップされたオブジェクト (実際にはあなたのオブジェクト) の更新を行います。
  • オブジェクトを元に戻すために を実行する最初のインスタンスputIfUntouched(...)は成功し、putIfUntouchedを返しtrueます。
  • これを試みる 2 番目のインスタンスは失敗し、 がputIfUntouched返されfalseます。
于 2013-05-11T15:02:53.340 に答える
0

並列操作で同じキーに書き込みを行っているときに、キーを読み取ることで memcache が破損することを心配していますか? これについて心配する必要はありません。memcache サーバーでは、両方の操作がアトミックに実行されます。

Memcache が「破損した」結果を出力することはなく、書き込み中に破損の問題が発生することもありません。

于 2013-05-11T06:23:33.643 に答える