您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
使用快取政策時,您可以設定快取金鑰,藉此確保快取值金鑰的獨特性。快取金鑰以及您可以設定的其他值,讓您透過可靠的方式取得自己輸入的資料。使用快取金鑰時,您可以採用填入快取政策、LookupCache 政策、InvalidateCache 政策和回應快取政策。
系統會串連 <CacheKey>
/<KeyFragment>
、<Scope>
和 <Prefix>
等設定元素的值,建立與您放入快取中的值相關聯的 ID。您可以使用相同的設定擷取值。
您可以使用下列快取政策設定元素,建立快取金鑰:
快取設定元素 | 說明 |
---|---|
<CacheKey> /<KeyFragment> |
合併使用 <CacheKey> <KeyFragment> 元素來指定快取項目的專屬 ID。KeyFragment 值可以是靜態常值,或透過變數設定。 |
<Scope> 或 <Prefix> |
使用 <Scope> 或 <Prefix> 元素,進一步設定命名空間快取金鑰。<Scope> 會列舉預先定義值的清單。<Prefix> 元素會以您自選的值覆寫 <Scope> 。 |
這些值會以下列格式串連在一起,包含 <Scope>
或 <Prefix>
值,並以雙底線分隔。多個 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>
值,因此請指定命名空間的自訂值。
舉例來說,<Scope>
值「全球」範圍最廣,代表機構和環境名稱。因此,如果您的 Proxy 已部署在名為「mycompany」的機構中,和名為「prod」的環境,則產生的前置字串值如下:
設定 | 結果 |
---|---|
<Scope>Global</Scope> |
mycompany__prod__ . |
如果將 Global 範圍與上述定義的快取金鑰搭配使用,結果如下:
設定 | 結果 |
---|---|
<Scope>Global</Scope> <CacheKey> <KeyFragment>hello</KeyFragment> <KeyFragment>world</KeyFragment> <CacheKey> |
mycompany__prod__hello__world . |
如 LookupCache 政策所述,您可以設定範圍,提高全域到專屬層級的明確性。專屬範圍是最具體的範圍,因此代表特定快取中發生命名空間衝突的風險將降到最低。每個具有專屬範圍的快取項目都會以下列格式開頭:
orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]
舉例來說,使用 <Scope>
專屬值建立的快取金鑰會如下所示:
apifactory__test__weatherapi__16__default__apiAccessToken