使用快取金鑰

您正在查看 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&param2=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&param2=value2param2=value2&param1=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