すべてのプロダクト
Search
ドキュメントセンター

Edge Security Acceleration:キャッシュAPI

最終更新日:Jan 03, 2025

Cache APIは、データをキャッシュするために使用されるメソッドです。 Cache APIを呼び出して、POPs (Point of presence) にデータをキャッシュし、後続のリクエストに対してデータをすばやく処理できるようにすることができます。 キャッシュAPI操作では、ビジネス要件に基づいて有効期間 (TTL) とキャッシュサイズを設定できます。

制御ポリシー機能の動作

Edgeルーチンの組み込みキャッシュAPIを使用して、Edgeルーチンによって処理された結果、またはEdge Security Acceleration (ESA) POP上のオリジンサーバーから取得されたデータをキャッシュできます。 このようにして、同じPOPにアクセスする他の要求は、キャッシュされた結果を再使用することができ、反復計算または要求の数が減少する。 エッジルーチンとESAキャッシュの関係を次の図に示します。工作原理

API仕様

キャッシュAPIは基本的にCacheで説明されている仕様に従いますが、エッジルーチンはESAの既存のキャッシュエンジンを再利用します。 その結果、キャッシュAPIとキャッシュの最終的なセマンティクスが異なる場合があります。

API定義

cache.put (リクエスト /文字列、レスポンス)

  • 応答オブジェクトをキャッシュに追加します。

    • PUTメソッドが成功すると、返されたPromiseは未定義に解決されます。

    • キャッシュエンジンが失敗すると、Promiseオブジェクトは拒否され、エラーがトリガーされます。

    • キャッシュエンジンのクォータが使い果たされると、Promiseオブジェクトは拒否され、エラーがトリガーされます。

  • キャッシュキーをRequestオブジェクトのURLに設定するか、文字列を使用してURLを指定します。 ESAのキャッシュエンジンの制限により、HTTP URLのみがサポートされます。

  • これは非同期関数です。 応答オブジェクトがCacheに追加されるまで待機するには、waitを呼び出します。

  • 応答オブジェクトのCache-Controlヘッダーを設定して、キャッシュのTTLを定義できます。 Cache-Controlヘッダーの設定は、Cacheの仕様を満たしている必要があります。

  • キャッシュにコンテンツを追加する

    async function doPut() {
      await cache.put("http://www.example.com", new Response("Hello World"));
      new Response("Hello World", {headers: [["cache-control", "max-age=10"]]})); 
    }
  • コンテンツをキャッシュに追加し、TTLを設定する

    async function doPut() {
      await cache.put("http://www.example.com", new Response("Hello World"));
      await cache.put("http://www.example.com", 
      new Response("Hello World", {headers: [["cache-control", "max-age=10"]]})); 
    }

cache.get (リクエスト /文字列)

  • 入力要求または入力文字列をキーとするResponseオブジェクトを取得します。 オブジェクトが存在しない場合、返されたPromiseは未定義に解決されます。

  • これは非同期関数です。 応答オブジェクトが取得されるまで待機を呼び出すことができます。

  • GETメソッドは、前述のPUTメソッドで追加されたオブジェクトを返さない場合があります。 LRU (least recently used) キャッシングアルゴリズムのため、キャッシュオブジェクトをフェッチすることはできません。

  • レスポンスオブジェクトの取得

    async function doGet() {
        let resp = await cache.get("http://www.example.com");
    }
  • 保存された結果をJSONに解析する

    async function doGet() {
        let resp = await cache.get("http://www.example.com");
        let j = await resp.json();
    }

cache.de lete (リクエスト /文字列)

  • キーが入力要求であるResponseオブジェクトを削除します。

    • Responseオブジェクトが削除された場合、返されたPromiseはtrueに解決されます。

    • Responseオブジェクトの削除に失敗した場合、返されるPromiseはfalseに解決されます。

  • これは非同期関数です。 応答オブジェクトが削除されるまで待機を呼び出すことができます。

例: キーのリソースの削除

async function doDelete() {
  let resp = await cache.delete("http://www.example.com");
  
  if (resp) {
        console.alert("done");
  } else {
        console.alert("failed");
  }
}

制限事項

  • 前述のすべてのリクエストは、Edge Routineサブリクエストのクォータを共有するサブリクエストです。 デフォルトでは、エッジルーチンリクエストには最大32のフェッチサブリクエストを含めることができます。 このクォータは、エッジルーチンが商用に使用された後に変更されます。 キャッシュ呼び出しは、フェッチサブリクエストのクォータを共有するサブリクエストと見なすことができます。 リクエストコンテキストでは、cache.put、cache.get、cache.de lete、およびfetchのサブリクエストの合計数が32を超えることはできません。

  • cache.put、cache.get、cache.de leteは同時実行制御されます。 1つの要求がGET操作を実行しており、別の要求が同じURLに対してDELETE操作を実行している場合、GETまたはDELETE操作に対して保留状態を返すことができます。 リクエストは、同じキーを持つリソースを同時に変更しようとするため、失敗します。 この場合、後でもう一度試すことができます。

    説明

    cache.put、cache.get、cache.de leteのリクエストが拒否され、返されたPromiseがtrueに解決された場合、操作は同時実行制御になります。

キャッシュのパージ

Cache APIを呼び出してキャッシュされたコンテンツを自動的にパージすることはできません。 Cache.put() を使用する場合は、TTLパラメーターを指定する必要があります。