サーバー側の Web 階層キャッシング

Commerce Cloud アプリケーション層コンポーネントの 1 つは、SCAPI リクエストの Web 階層キャッシングを実行します。これは、さまざまな API ファミリーへの GET リクエストに影響を与えます。

このサーバー側のキャッシングメカニズムは、リクエストが Commerce Cloud のサーバー側アプリケーション層に到達した後でのみ使用されます。別のキャッシングメカニズムが設置されている場合は (たとえば、クライアント側)、そのメカニズムは引き続き独立して使用されます。ストアフロント実装のフロントエンドまたはクライアント側で複数のキャッシング層を扱う場合は、これを考慮する必要があります。

次の API の GET リクエストに対するレスポンスはキャッシュされます。

  • /product/shopper-products/v1/organizations/{org-id}/categories/{id}
  • /product/shopper-products/v1/organizations/{org-id}/categories
  • /product/shopper-products/v1/organizations/{org-id}/products/{id}
  • /product/shopper-products/v1/organizations/{org-id}/products
  • /search/shopper-search/v1/organizations/{org-id}/product-search
  • /search/shopper-search/v1/organizations/{org-id}/search-suggestions
  • /pricing/shopper-promotions/v1/organizations/{org-id}/promotions/campaigns
  • /pricing/shopper-promotions/v1/organizations/{org-id}/promotions/campaigns

この機能は、Business Manager の「機能スイッチ」モジュールで有効にすることができます。これを行うには、Business Manager で管理 > 機能スイッチ に移動し、SCAPI サーバー側の Web 階層キャッシング の機能スイッチを有効にします。

これは、23.10.1 リリース以降で可能になります。

  • 2023/10/10 (Sandbox)。
  • 2023/10/17 (その他のインスタンスタイプ)。

これとは別に、特定のサイトに対して動的コンテンツのページキャッシングを有効にする必要があります。

これを行うには、Business Manager で、管理 > サイト > サイトの管理 > サイト名 - キャッシュの順に移動し、その後「ページキャッシングを有効にする」を選択します。

キャッシュエントリの有効期間、ならびにレスポンスがパーソナライズされるかどうかは、API、または API および選択された展開に利用可能な展開があるかどうかによって決まります。たとえば、availability (入手可能性) の展開が選択された状態で Product API に対してリクエストが行われた場合、キャッシュエントリはデフォルトで 60 秒のみ保存されます。

API に展開がある場合、すべての展開の中で最短の TTL により、キャッシュエントリの有効期間が決まります。リクエストされた展開の少なくとも 1 つが「パーソナライズ済み」としてマークされていない場合、レスポンス全体はパーソナライズされていないとみなされます。

API の名前展開キャッシュの TTL (秒単位) (デフォルト)パーソナライズ済み (デフォルト)
Categories該当なし86400いいえ
Productsavailability60いいえ
bundled_products86400いいえ
images86400いいえ
links86400いいえ
options86400いいえ
prices900はい
promotions900はい
recommendations86400いいえ
set_products86400いいえ
variations86400いいえ
なし86400いいえ
Product Searchavailability60いいえ
images900いいえ
prices900はい
represented_products900いいえ
variations900いいえ
なし900いいえ
Search Suggestions該当なし900いいえ
Promotions該当なし3600いいえ
Campaigns該当なし3600いいえ

特定の展開ではキャッシュエントリの有効期間は非常に短いため、必要な展開のみがリクエストに含まれていることを確認するようお勧めします。たとえば、Products API へのリクエストに「availability」の展開を不必要に含めると、キャッシュのヒット率は大幅に低下し、リクエストの全体的なパフォーマンスに悪影響を及ぼします。

Script API には、キャッシュ設定をプログラムで制御するためのオプションが用意されています。

Script API の dw.system.Response#setExpires(milliseconds) メソッドを使用すると、任意のキャッシュ有効期限のタイムスタンプを設定できます。このメソッドはミリ秒単位のタイムスタンプを受け入れるため、現在のタイムスタンプと必要な「TTL (有効期間)」の合計をパラメーターとして渡す必要があります。

たとえば、カテゴリ API のレスポンスを 1 日ではなく 1 時間のみキャッシュする場合は、次のカスタムコードを使用できます。

キャッシュの TTL は 1 秒以上である必要があり、86,400 秒を超えることはできません。

Script API の dw.system.Response#setVaryBy(String varyBy) メソッドは、指定されたバリアント識別子を使用してレスポンスをパーソナライズ済みとしてマークします。price_promotion のみがサポートされており、他の値は無効です。

デフォルトでは、prices (価格) の展開と promotions (プロモーション) の展開を使用した商品呼び出し、および prices (価格) の展開を使用した商品検索呼び出しはパーソナライズれています。

現時点では、キャッシュを手動で無効にする方法は 1 つだけで、サイトのページキャッシュ全体を無効にすることです。

Business Manager で、管理 > サイト > サイトの管理 > サイト名 - キャッシュ の順に移動し、キャッシュタブを選択します。「キャッシュの無効化」セクションに、サイトのページキャッシュを無効にするボタンがあります。無効化がトリガーされると、SCAPI レスポンスに関連するキャッシュを含む、サイトのページキャッシュ全体が 15 分以内にクリアされます。

これにより、既存のパイプラインのキャッシュもすべて無効になり、パフォーマンスが一時的に低下する可能性があります。

新しいサーバー側のキャッシュを導入すると、キャッシュされたエンドポイントのレスポンスは常に Cache-Control ヘッダー値の no-cache, no-store, must-revalidate を返します。特にパーソナライズする場合は、SCAPI と Script Controller API の均一な動作を保証するために必要です。