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
インターフェースコントラクトに違反します。これは、信頼できず正確でない戻り値が特定のメソッドに提供されるため、コントラクトに違反することになります。そのため、必ずこれらの戻り値が設定上重要な目的に使用されないようにしてください。