PopulateCache 政策

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

設定應在執行階段寫入快取值的方式。

「填入快取」政策是專為在短期的一般用途快取中寫入項目而設計。 會搭配 Lookup 使用 快取政策 (用於讀取快取項目) 和 撤銷快取政策 (用於撤銷項目)。

如要快取後端資源的回應,請參閱 回應快取政策

元素參照

以下列出您可以為這項政策設定的元素。

<PopulateCache async="false" continueOnError="false" enabled="true" name="Populate-Cache-1">
    <DisplayName>Populate Cache 1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref=""/>
    </CacheKey>
    <!-- Omit this element if you're using the included shared cache. -->
    <CacheResource/>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <TimeoutInSeconds>300</TimeoutInSeconds>
    </ExpirySettings>
    <Source>flowVar</Source>
</PopulateCache>

&lt;PopulateCache&gt;屬性

下表說明所有政策父項元素的共同屬性:

屬性 說明 預設 存在必要性
name

政策的內部名稱。name 屬性的值可以 包含英文字母、數字、空格、連字號、底線和半形句號。此值不能 超過 255 個半形字元

視需要使用 <DisplayName> 元素,為政策加上標籤: 管理使用者介面 Proxy 編輯器,使用不同的自然語言名稱。

不適用 必填
continueOnError

如果設為「false」,系統會在政策失敗時傳回錯誤。這是可預期的情況 大多數政策的行為

如果設為 true,即使政策已發生,流程執行作業仍會繼續執行 失敗。

false 選用
enabled

如要強制執行政策,請設為 true

設為 false 即可停用政策。這項政策不會 仍會強制執行 政策。

true 選用
async

此屬性已淘汰。

false 已淘汰

&lt;DisplayName&gt;元素

name 屬性外,一併使用 管理 UI Proxy 編輯器,使用不同的自然語言名稱。

<DisplayName>Policy Display Name</DisplayName>
預設

不適用

如果省略這個元素,政策的 name 屬性值會是

存在必要性 選用
類型 字串

&lt;CacheKey&gt;元素

設定儲存在快取中資料的唯一指標。

快取金鑰的大小上限為 2 KB。

<CacheKey>
    <Prefix>string</Prefix>
    <KeyFragment ref="variable_name" />
    <KeyFragment>literal_string</KeyFragment>
</CacheKey>

預設:

不適用

所在地:

必填

類型:

不適用

<CacheKey> 會建立儲存在 快取。

在執行階段,<KeyFragment> 值會在前面加上 <Scope> 元素值或 <Prefix> 值。舉例來說, 產生的快取金鑰 UserToken__apiAccessToken__&lt;value_of_client_id&gt;:

<CacheKey>
    <Prefix>UserToken</Prefix>
    <KeyFragment>apiAccessToken</KeyFragment>
    <KeyFragment ref="request.queryparam.client_id" />
</CacheKey>

請將 <CacheKey> 元素與 <Prefix><Scope>。詳情請參閱使用快取金鑰

&lt;CacheResource&gt;元素

指定應儲存訊息的快取。

如果這項政策 (以及您的對應 LookupCache 與 InvalidateCache 政策) 使用的是隨附共用快取。

<CacheResource>cache_to_use</CacheResource>

預設:

不適用

所在地:

選用

類型:

字串

如要進一步瞭解如何設定快取,請參閱建立及編輯環境 快取。

&lt;CacheKey&gt;/&lt;KeyFragment&gt;元素

指定要納入快取金鑰的值,建立用來比對的命名空間 快取回應產生的要求。

<KeyFragment ref="variable_name"/>
<KeyFragment>literal_string</KeyFragment>

預設:

不適用

所在地:

選用

類型:

不適用

這可以是鍵 (您提供的靜態名稱) 或值 (由 參照變數)。所有指定片段組合 (加上前置字串) 都會串連 建立快取金鑰

<KeyFragment>apiAccessToken</KeyFragment>
<KeyFragment ref="request.queryparam.client_id" />

請將 <KeyFragment> 元素與 <Prefix><Scope>。詳情請參閱使用快取金鑰

屬性

屬性 類型 預設 必填 說明
參考資料 字串

用來取得值的變數。如果這個元素包含 一個常值。

&lt;CacheKey&gt;/&lt;Prefix&gt;元素

指定要做為快取金鑰前置字串的值。

<Prefix>prefix_string</Prefix>

預設:

不適用

所在地:

選用

類型:

字串

如要指定自己的值,請使用這個值,而非 <Scope> 而非 <Scope> 列舉值。如已定義 <Prefix> 會在寫入快取的項目前面加上快取金鑰值。A 罩杯 <Prefix> 元素值會覆寫 <Scope> 元素 值。

請將 <Prefix> 元素與 <CacheKey><Scope>。詳情請參閱使用快取金鑰

&lt;ExpirySettings&gt;元素

指定快取項目的到期時間。時間 目前存在,<TimeoutInSeconds> 項覆寫 <TimeOfDay><ExpiryDate> 兩者。

<ExpirySettings>
  <!-- use exactly one of the following child elements -->
  <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds>
  <ExpiryDate ref="date_variable">expiration_date</ExpiryDate>
  <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
</ExpirySettings>

預設:

不適用

所在地:

必填

類型:

不適用

<ExpirySettings> 的子元素

您只能使用一個子元素。下表提供 <ExpirySettings>:

子元素 說明
<TimeoutInSeconds>

快取項目的到期時間 (以秒為單位)。

<ExpirySettings>
  <TimeoutInSeconds ref="var-containing-duration">expiry</TimeoutInSeconds>
</ExpirySettings>

這個元素會取代現已淘汰的 TimeoutInSec 元素。

<ExpiryDate>

指定快取項目的到期日。請以下列格式指定字串 mm-dd-yyyy

<ExpirySettings>
  <ExpiryDate ref="var-containing-date">expiry</ExpiryDate>
</ExpirySettings>

如果指定的日期是過去的日期,政策就會套用 存留時間上限 (TTL)。最長不得超過 30 天。

<TimeOfDay>

指定快取項目的到期時間。 以 HH:mm:ss 格式指定字串,其中 HH 代表 24 小時制 (以世界標準時間為準)。例如,14:30:00 意味著 下午 2:30

<ExpirySettings>
  <TimeOfDay ref="var-containing-time">expiry</TimeOfDay>
</ExpirySettings>

您只能指定其中一項可能的子元素。如果要指定多個元素 優先順序為:TimeoutInSecondsExpiryDateTimeOfDay

透過 <ExpirySettings> 的上述每個子元素, 如果您為子項元素指定 ref 的選用屬性,則這項政策會 從已命名的結構定義變數中擷取到期時間值。如果未定義變數 這項政策會使用子項元素的常值文字值。

&lt;Scope&gt;元素

<Prefix> 時,用於建構快取金鑰的前置字串的列舉 未在 <CacheKey> 元素中提供。

<Scope>scope_enumeration</Scope>

預設:

「獨家」

所在地:

選用

類型:

字串

<Scope> 設定會決定系統會根據 <Scope> 值。舉例來說,快取金鑰採用以下格式時 範圍設為 Exclusive

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__ [ serializedCacheKey ]

如果 <CacheKey> 中有 <Prefix> 元素, 會取代 <Scope> 元素值。有效值包括列舉值 。

請將 <Scope> 元素與 <CacheKey><Prefix>。詳情請參閱使用快取金鑰

可接受的值

Global

部署於環境中的所有 API Proxy 會共用快取金鑰。快取金鑰為 前面加上 orgName __ envName __。

如果您使用<CacheKey> <KeyFragment> apiAccessToken 和 <Global> 範圍, 每個項目都會儲存為 orgName__envName__apiAccessToken,後面接著 存取權杖的序列化值。如為部署在名為 「test」存取權杖儲存在名為「apiFactory」的機構中 下列快取金鑰:apifactory__test__apiAccessToken

Application

系統會使用 API Proxy 名稱做為前置字串。

快取金鑰的前置字串為 orgName__envName__apiProxyName

Proxy

系統會使用 ProxyEndpoint 設定做為前置字串。

快取金鑰會加在下列格式中 orgName__envName__apiProxyName__deployedRevisionNumber__proxyEndpointName

Target

目標端點設定會用作前置字串。

表單前面加上的快取金鑰 orgName__envName__apiProxyName__deployedRevisionNumber__targetEndpointName

Exclusive

預設。這是最具體的,因此對命名空間帶來的風險最低 特定快取中的衝突。

前置字串為兩種形式之一:

  • 如果政策已附加至 ProxyEndpoint 流程,前置字串就是 格式為 ApiProxyName_ProxyEndpointName
  • 如果政策是在 TargetEndpoint 附加,前置字元為以下格式: ApiProxyName_TargetName.

表單前面加上的快取金鑰 orgName__envName__apiProxyName__deployedRevisionNumber__proxyNameITargetName

舉例來說,完整字串可能如下所示:

apifactory__test__weatherapi__16__default__apiAccessToken

&lt;Source&gt;元素

指定應將值寫入快取的變數。

<Source>source_variable</Source>

預設:

不適用

所在地:

必填

類型:

字串

使用須知

請將這項政策用於一般用途快取。在執行階段中, <PopulateCache> 政策會從您在 <Source> 元素設為您在 <CacheResource> 元素。您可以使用 <CacheKey><Scope><Prefix> 元素,藉此指定您 可使用 <LookupCache> 政策擷取值。使用 <ExpirySettings> 元素,設定快取值的到期時間。

使用 PopulateCache 政策、LookupCache 政策InvalidateCache 政策進行一般用途快取 您設定的快取或預設包含的共用快取。在大多數的情況下, 基本共用快取就能滿足需求如要使用這個快取,只要省略 <CacheResource> 元素。

快取限制各種快取限制 例如名稱和值大小、快取總數、快取中的項目數量 以及到期日

如要進一步瞭解基礎資料儲存庫,請參閱「快取內部」。進一步瞭解如何設定 快取,請參閱建立及編輯 環境快取

關於快取加密

公有雲的邊緣:快取只會PCI: 且已啟用 HIPAA 員工只能在您的 Google Cloud 機構中存取資源 無法在其他機構存取資源已在組織期間設定這些機構的加密機制 佈建工作

錯誤代碼

本節說明在這項政策觸發錯誤時,所傳回的錯誤代碼和錯誤訊息,以及 Edge 所設定的錯誤變數。 請務必瞭解這份資訊,以便瞭解您是否要擬定錯誤規則, 處理錯誤詳情請參閱這篇文章 瞭解政策錯誤處理方式 發生錯誤

執行階段錯誤

執行政策時,可能會發生這些錯誤。

錯誤程式碼 HTTP 狀態 發生時間
policies.populatecache.EntryCannotBeCached 500 無法快取項目。要快取的訊息物件並非 類別為 Serializable

部署錯誤

當您部署含有這項政策的 Proxy 時,可能會發生這些錯誤。

錯誤名稱 原因 修正
InvalidCacheResourceReference 如果 PopulateCache 政策中的 <CacheResource> 元素設為 沒有名稱在部署 API Proxy 的環境中。
CacheNotFound <CacheResource> 元素中指定的快取並未 個值。

錯誤變數

當這項政策觸發錯誤時,系統會設定這些變數。詳情請參閱重要須知 政策錯誤。

變數 地點 範例
fault.name="fault_name" fault_name 是錯誤的名稱,如上方「執行階段錯誤」表格所列。錯誤名稱是錯誤程式碼的最後部分。 fault.name = "EntryCannotBeCached"
populatecache.policy_name.failed policy_name 是使用者指定錯誤的政策名稱。 populatecache.POP-CACHE-1.failed = true

錯誤回應範例

{
  "fault": {
    "faultstring": "[entry] can not be cached. Only serializable entries are cached.",
    "detail": {
      "errorcode": "steps.populatecache.EntryCannotBeCached"
    }
  }
}

錯誤規則範例

<FaultRule name="Populate Cache Fault">
    <Step>
        <Name>AM-EntryCannotBeCached</Name>
        <Condition>(fault.name Matches "EntryCannotBeCached") </Condition>
    </Step>
    <Condition>(populatecache.POP-CACHE-1.failed = true) </Condition>
</FaultRule>