您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
使用快取政策時,請設定快取鍵,確保快取值鍵的專屬性。快取鍵和其他可設定的值,可讓您以可靠的方式取得輸入的相同資料。您可以使用快取金鑰搭配 Populate Cache 政策、LookupCache 政策、InvalidateCache 政策和 Response Cache 政策。
設定元素的值 (<CacheKey>/<KeyFragment>、<Scope> 和 <Prefix>) 會串連在一起,建立與您放入快取中的值相關聯的 ID。您可以使用相同的設定來擷取值。
您可以使用下列快取政策設定元素建立快取鍵:
| 快取設定元素 | 說明 |
|---|---|
<CacheKey>/<KeyFragment> |
使用 <CacheKey> <KeyFragment> 元素組合,指定快取項目的專屬 ID。KeyFragment 值可以是靜態文字,也可以從變數設定。 |
<Scope> 或 <Prefix> |
使用 <Scope> 或 <Prefix> 元素,進一步命名空間快取金鑰。<Scope> 列舉預先定義的值清單。
<Prefix> 元素會以您選擇的值覆寫 <Scope>。 |
這些值會以下列形式串連,並以雙底線分隔 <Scope> 或 <Prefix> 值和 KeyFragment 值。多個 KeyFragment 值也以雙底線分隔。
scope | prefix__keyfragment[__keyfragment]
使用回應快取政策時,您可以視需要將回應 Accept 標頭中的值附加至這個快取鍵。
使用 <CacheKey>
<CacheKey> 元素會設定 Edge 為建立的每個快取項目建立專屬 ID (金鑰) 的方式。Edge 擷取快取值時,會使用快取鍵尋找正確的值。在 ResponseCache 政策中,一項設定會定義快取和擷取的鍵。在 PopulateCache 和 LookupCache 政策中,每項政策都必須有相同的 <CacheKey> 元素,確保從快取擷取的值與放入快取的值相符。
<CacheKey> 元素可包含多個 <KeyFragment> 元素。在執行階段,<KeyFragment> 元素指定的值會以兩個底線串連,組成快取鍵的一部分。
舉例來說,下列設定會建立 hello__world 值,用於快取鍵:
<CacheKey>
<KeyFragment>hello</KeyFragment>
<KeyFragment>world</KeyFragment>
<CacheKey>您也可以在快取鍵中使用變數值,方法是在 <KeyFragment> 元素中參照變數,如下所示:
<KeyFragment ref="variable_name"/>
舉例來說,如要讓快取鍵值納入要求訊息的 Content-Type,請按照下列步驟操作:
<KeyFragment ref="request.header.Content-Type"/>
在下列設定中,request.header.Content-Type 變數的值為 application/json。
<CacheKey> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.header.Content-Type" /> <KeyFragment>bar</KeyFragment> </CacheKey>
這樣一來,快取鍵的結尾就會是 apiAccessToken__application/json__bar。
如需可用變數清單,請參閱「變數參考資料」。
從查詢參數衍生的快取鍵
使用 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>在執行階段,快取鍵會包含串連的參數值,如下所示:
other_key_parts__value1__value2
請注意,使用變數從參數插入值時,系統會按照 <KeyFragment> 元素順序建議的順序串連值。此外,請注意,Edge 只會使用您透過 <KeyFragment> 元素明確參照的值。如果要求查詢參數清單有所不同,快取鍵就不會將這些差異納入考量。
另一種做法是使用 request.querystring 變數,將整個參數字串直接插入快取鍵中。請注意,雖然這個方法會考量所有參數,但如果參數順序在不同要求之間有所差異,金鑰就會不同。換句話說,param1=value1¶m2=value2 和 param2=value2¶m1=value1 不會產生相同的快取金鑰值。
如需可用變數清單,請參閱「變數參考資料」。
使用 <Scope> 和 <Prefix>
<Scope> 和 <Prefix> 元素可讓您使用命名空間前置字串擴增鍵。這些值代表的內容會加到快取鍵的前面。
根據預設,系統會使用 <Scope> 元素。這項列舉的值範圍從廣泛到狹窄,預設為最狹窄。除非您指定其他值或 <Prefix> 元素值,否則系統會使用這個預設值。您可以使用 <Prefix> 元素覆寫 <Scope> 值,並指定命名空間的自訂值。
舉例來說,最廣泛的範圍是「Global」,代表機構和環境名稱。<Scope> 值為「Global」時,因此,如果您的 Proxy 部署在名為「mycompany」的機構和名為「prod」的環境中,產生的前置值會是:
| 設定 | 結果 |
|---|---|
<Scope>Global</Scope> |
mycompany__prod__。 |
如果您使用「全域」範圍和上述定義的快取鍵,結果如下:
| 設定 | 結果 |
|---|---|
<Scope>Global</Scope>
<CacheKey>
<KeyFragment>hello</KeyFragment>
<KeyFragment>world</KeyFragment>
<CacheKey> |
mycompany__prod__hello__world。 |
如LookupCache 政策所述,範圍可從「全域」到「專屬」設定,以提高精確度。「專屬」範圍最為具體,因此在特定快取中,命名空間發生衝突的風險最低。每個具有 Exclusive 範圍的快取項目都會加上下列形式的前置字元:
orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]
舉例來說,使用 <Scope> 的 Exclusive 值建立的快取鍵會如下所示:
apifactory__test__weatherapi__16__default__apiAccessToken