キャッシュ戦略のセットアップ

キャッシュ戦略は、Anypoint Studio の Cache スコープのプロパティパネルまたはグローバル要素設定から作成できます。戦略を作成したら、フローの Cache コンポーネントで参照できます。

キャッシュ戦略から定義または参照されるオブジェクトストアでこれらの値を設定することで、キャッシュサイズ、有効期限、許容される最大エントリ数を設定できます。

キャッシュ戦略を設定する手順は次のとおりです。

  1. [Caching Strategy configuration (キャッシュ戦略設定)] ウィンドウを開きます。

    このウィンドウは、Cache スコープのパネルまたは、Studio の [Global Elements (グローバル要素)] タブの ​[Caching Strategies (キャッシュ戦略)]​ オプションから開くことができます。

    キャッシュ戦略の設定

  2. キャッシュ戦略の​名前​を定義します。

  3. 次のいずれかのオプションを選択して、使用する​オブジェクトストア​を定義します。

    • Edit Inline (インライン編集)
      このオプションは、このキャッシュ戦略に特有のオブジェクトストア設定を作成します。

    • Global Reference (グローバル参照)
      このオプションは、既存のオブジェクトストアを選択するか、またはこのキャッシュ戦略とアプリケーション内の他のすべてのコンポーネントから参照できる新しいグローバルオブジェクトストアを作成します。

  4. キャッシュ戦略内でイベントを保存するために使用されるキーを生成するメカニズムを選択します。

    • デフォルト

    • Key Expression (キー式)

      DataWeave 式 (​keyGenerationExpression="#[vars.requestId]"​ など)。

      同じ (「等しい」) 2 つの要求の場合、同じキーを生成する必要があります。そのようにしないと、誤った結果を取得する可能性があります。

    • Key Generator (キージェネレーター)

      com.mulesoft.mule.runtime.cache.api.key.MuleEventKeyGenerator​ インターフェースを実装する必要があります。

  5. (省略可能) プロパティウィンドウで ​[Advanced (詳細)]​ タブを開いて詳細設定を行います。

    キャッシュ戦略の詳細設定

    • 応答ジェネレーター​を選択または作成する。

      このステップでは、​com.mulesoft.mule.runtime.cache.api.response.ResponseGenerator​ インターフェースを実装する必要があります。

    • イベントコピー戦略​を選択する:

      • シンプルイベントコピー戦略

        データは不変です。これがデフォルト値です。

      • シリアル化可能イベントコピー戦略

        データは変化します。

キャッシュへの同期アクセス

デフォルトでは、(同じまたは異なる Mule インスタンスの) 複数のメッセージプロセッサーが同時にキャッシュを使用する場合の予期しない結果を回避ために、Mule ではキャッシュへのアクセスが同期されます。

2 つのメッセージプロセッサーがキャッシュから値を取得しようとして、キャッシュ内に値が見つからないシナリオを考えてみます。この場合、各メッセージプロセッサーは値を個別に計算し、その値をキャッシュに挿入します。キャッシュへのアクセスが同期されない場合、2 番目のメッセージプロセッサーによって挿入された値が、最初のメッセージプロセッサーによって挿入された値を上書きします。値が異なる場合、同じ入力に対して 2 つの異なる結果が取得され、最後の 1 つのみがキャッシュに保存されます。

一部のシナリオではこの結果は有効ですが、アプリケーションがキャッシュコヒーレンスを必要とする場合は問題になる可能性があります。キャッシング戦略を同期することで、このコヒーレンスが保証されます。同期されたキャッシュは、メッセージプロセッサーによって変更されているときにロックされます。前のシナリオのロックされたキャッシュでは、最初のメッセージプロセッサーが値を計算するまで 2 番目のメッセージプロセッサーは強制的に待機させられ、その後キャッシュから値を取得します。

キャッシュの同期を無効にするには、​<ee:object-store-caching-strategy>​ 要素で ​synchronized​ プロパティを定義して ​false​ に設定することができます。

同期はパフォーマンスに影響し、その影響はクラスターモードで最も深刻になります。

キャッシュ戦略の例

次の XML スニペットは、キャッシュへのアクセスを同期し、キャッシュされた応答を保存する永続的なオブジェクトストアを定義するキャッシュ戦略の設定例を示しています。このキャッシュ戦略は、Cache スコープによって参照されています。

<!-- Caching strategy definition -->
<ee:object-store-caching-strategy name="Caching_Strategy" doc:name="Caching Strategy" synchronized="false" >
  <!-- Object Store defined for the caching strategy-->
  <os:private-object-store
    alias="CachingStrategy_ObjectStore"
    maxEntries="100"
    entryTtl="10"
    expirationInterval="5"
    config-ref="ObjectStore_Config" />
</ee:object-store-caching-strategy>

<!-- Cache scope referencing the strategy-->
<ee:cache doc:name="Cache" cachingStrategy-ref="Caching_Strategy">
      <!-- Some processing logic to cache-->
</ee:cache>