本頁內容適用於 Apigee 和 Apigee 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¶m2=value2
您的 <CacheKey>
元素可透過下列設定納入這些值:
<CacheKey> <KeyFragment ref="request.queryparam.param1" /> <KeyFragment ref="request.queryparam.param2" /> <CacheKey>
在執行階段,快取鍵會包含串連的參數值,如下所示:
prefix_part__value1__value2
除了指定多個不同的查詢參數,您也可以使用 request.querystring
變數,將整個參數字串直接插入快取金鑰中。請注意,雖然這個方法會將所有參數納入考量,但如果參數順序在不同要求之間有所差異,金鑰就會不同。換句話說,param1=value1¶m2=value2
和 param2=value2¶m1=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
在本例中, |