7.8. ディストリビューションモードにおける GET および PUT の使用

ディストリビューションモードでは、write コマンドの前にキャッシュがリモートの GET コマンドを実行します。これは、java.util.Map コントラクトに従って指定されたキーに関連する以前の値を返すメソッド (Cache.put()) があるからです。これがキーを所有しないインスタンスで実行され、エントリーが 1 次キャッシュで見つからない場合、PUT の前にリモートの GET を実行することが、戻り値を取得するための信頼できる唯一の方法になります。
Red Hat JBoss Data Grid は戻り値を待たなければならないため、キャッシュが同期または非同期であるかに関わらず、PUT 操作の前に発生する GET 操作は常に同期になります。

7.8.1. 分散された GET および PUT 操作

ディストリビューションモードでは、必要な PUT 操作を実行する前に、キャッシュが GET 操作を実行することがあります。
この操作は、リソースの面では非常にコストのかかる操作になります。リモート GET 操作は同期であるにも関わらず、すべての応答を待たないため、無駄になるリソースが発生します。GET 処理は最初に受信する有効な応答を許可するため、パフォーマンスとクラスターの大きさとの関連性はありません。
ご使用の実装で戻り値が必要でない場合、呼び出し毎の設定に対する Flag.SKIP_REMOTE_LOOKUP フラグを使用します。
このような動作は、キャッシュの操作や全パブリックメソッドの正確な機能を害することはありませんが、java.util.Map インターフェースコントラクトに違反します。これは、信頼できず正確でない戻り値が特定のメソッドに提供されるため、コントラクトに違反することになります。そのため、必ずこれらの戻り値が設定上重要な目的に使用されないようにしてください。