使用快取金鑰

本頁內容適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

使用快取政策時,請設定快取金鑰,確保快取值金鑰的獨特性。快取金鑰和其他可設定的值,可讓您以可靠的方式取得輸入的相同資料。您可以使用快取金鑰搭配 PopulateCache 政策LookupCache 政策InvalidateCache 政策ResponseCache 政策

Apigee 會使用設定元素的值 (<Scope><CacheKey>/<Prefix><CacheKey>/<KeyFragment>) 來組成快取金鑰的值,這個值是與快取中的值相關聯的 ID。所有快取政策的快取鍵組成方式都相同。

您可以使用下列快取政策設定元素建立快取金鑰:

快取設定元素 說明
<Scope><CacheKey> / <Prefix> 使用 <Scope><CacheKey> <Prefix> 元素,設定要套用至最終快取金鑰的前置字元。<Scope> 列舉預先定義的值清單。<CacheKey> <Prefix> 元素會以您選擇的固定值覆寫 <Scope>
<CacheKey>/<KeyFragment> 使用一或多個 <CacheKey> <KeyFragment> 元素組合,為快取項目指定專屬 ID。KeyFragment 值可以是靜態常值, 也可以從變數設定。

Apigee 會將快取金鑰分成兩部分,分別是前置字串部分和複合片段部分,並以雙底線分隔。

PREFIX_PART__FRAGMENT_PART

前置字元部分是由 <Scope> 元素或 <CacheKey> <Prefix> 元素 (如果存在) 決定。片段部分是由每個 <KeyFragment> 元素的值組成,並以雙底線連結。

使用回應快取政策時,您可以選擇性地將這個快取金鑰附加至回應 Accept 標頭中的值。

使用 <CacheKey>

<CacheKey> 元素會設定 Apigee 如何為建立的每個快取項目建立專屬 ID (鍵)。Apigee 擷取快取值時,會使用快取鍵找出正確的值。在 ResponseCache 政策中,一項設定會定義快取和擷取的鍵。在 PopulateCache 和 LookupCache 政策中,每項政策都必須有相同的 <CacheKey> 元素,確保從快取擷取的值與放入快取的值相符。

<CacheKey> 元素可包含單一選用的 <Prefix> 元素,以及一或多個 <KeyFragment> 元素。在執行階段,Apigee 會將各部分的值串連起來,並在中間加上兩個底線,組成快取金鑰。

舉例來說,下列設定會建立 myprefix__hello__world 值,用於快取金鑰:

<CacheKey>
    <Prefix>myprefix</Prefix>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>

您可以透過在 <KeyFragment> 元素中參照變數,將 Apigee 設定為使用動態組成的快取金鑰,如下所示:

<KeyFragment ref="variable_name"/>

舉例來說,如要讓快取鍵值納入要求訊息的 Content-Type,請執行下列操作:

<KeyFragment ref="request.header.Content-Type"/>

請參考下列設定:

<CacheKey>
  <Prefix>system1</Prefix>
  <KeyFragment>apiAccessToken</KeyFragment>
  <KeyFragment ref="request.header.Content-Type" />
  <KeyFragment>bar</KeyFragment>
</CacheKey>

如果 request.header.Content-Type 變數的值為 application/json,這會產生 system1__apiAccessToken__application/json__bar 的快取金鑰。

您可以在 ref 屬性中使用平台定義或自訂變數。

從查詢參數衍生的快取金鑰

使用 request.queryparam.<queryparam_name> 和 request.querystring 等變數,即可設定快取金鑰,讓金鑰包含要求查詢字串的部分內容。舉例來說,下列網址使用兩個查詢參數 (param1 和 param2),可用於快取金鑰:

http://myaccount.apigee.net/mydata?param1=value1&param2=value2

您的 <CacheKey> 元素可透過下列設定納入這些值:

<CacheKey>
    <KeyFragment ref="request.queryparam.param1" />
    <KeyFragment ref="request.queryparam.param2" />
<CacheKey>

在執行階段,快取鍵會包含串連的參數值,如下所示:

prefix_part__value1__value2

除了指定多個不同的查詢參數,您也可以使用 request.querystring 變數,將整個參數字串直接插入快取金鑰中。請注意,雖然這個方法會將所有參數納入考量,但如果參數順序在不同要求之間有所差異,金鑰就會不同。換句話說,param1=value1&param2=value2param2=value2&param1=value1 不會產生相同的快取鍵值。

使用 <Scope> 和 <Prefix>

<Scope><CacheKey>/<Prefix> 元素可將快取值整理到命名空間中。Apigee 會將從這些值衍生的值加到快取金鑰的前面。 在快取金鑰中使用範圍或前置字串的優點是,您只需呼叫一次 InvalidateCache 政策,即可讓共用單一前置字串的所有值失效。

根據預設,系統會使用 <Scope> 元素。這是列舉,值從廣泛到狹窄,預設為最狹窄。除非指定其他值或 <Prefix> 元素值,否則系統會使用這個預設值。您可以使用 <CacheKey>/<Prefix> 元素覆寫 <Scope> 值,並指定命名空間的自訂值。

舉例來說,<Scope> 值「Global」代表最廣泛的範圍,也就是機構和環境名稱。因此,如果您的 Proxy 部署在名為「mycompany」的機構和名為「prod」的環境中,則產生的前置字串值如下:

mycompany__prod__[FRAGMENT_PART]

如「LookupCache 政策」所述,您可以設定範圍,從「全域」到「專屬」提高具體程度。「專屬」範圍最為具體,因此在特定快取中,命名空間發生衝突的風險最低。每個具有 Exclusive 範圍的快取項目都會加上下列形式的前置字元:

orgName__envName__apiProxyName__deployedRevisionNumber__nameof(proxyEndpoint|targetEndpoint)__[serializedCacheKey]

以下列舉幾個例子。這些假設是根據名為「weatherapi」的 Proxy 第 16 個修訂版本,部署在名為「mycompany」的機構和名為「prod」的環境中,且 proxyEndpoint 名稱為「default」,而快取政策已附加至 proxyEndpoint 中的流程。

設定 結果
<Scope>Global</Scope>
<CacheKey>
  <KeyFragment>hello</KeyFragment>
  <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__hello__world
<Scope>Exclusive</Scope>
<CacheKey>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__weatherapi__16__default__hello__world
<Scope>Exclusive</Scope>
<CacheKey>
    <Prefix>system1</Prefix>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
system1__hello__world

在本例中,<Prefix> 元素會覆寫 <Scope>,因此結果中會顯示命名空間 system1