通過緩存可以將后端返回的應答緩存在API網關服務層面,有效降低后端的負荷,增加平滑度。
1. 使用方法
僅緩存GET方法的應答
不緩存使用
默認分組二級域名
的請求,默認分組二級域名有1000次/天的限制(海外Region及中國香港限制100次/天),僅用于測試場合可在插件中加入如下的配置來區分不同的緩存
varyByApp:針對不同的App區分緩存
varyByParameters:針對不同的參數取值區分緩存,從綁定的API取同名的參數
varyByHeaders:針對不同的請求頭區分緩存,如
Accept
,Accept-Language
現在用戶在每個Region可以使用的緩存空間為1M(按用戶區分), 使用超期釋放策略,緩存滿了后不緩存后續的應答。
網關遵守后端應答中的
Cache-Control
頭的約定來處理緩存,如果后端不返回Cache-Control
頭,則默認緩存,使用插件中配置的duration
字段作為緩存超期時間。最長允許的超期時間為48小時(172800秒), 超過這個時間的配置無效,被視為48小時超期
網關默認不處理客戶端的
Cache-Control
頭,可以通過clientCacheControl
來進行配置,mode
取值為off
:忽略所有客戶端請求中的Cache-Control
頭all
:處理對所有客戶端的請求中的Cache-Control
頭app
:僅處理AppId
在apps
配置列表中的請求的Cache-Control
頭
對于應答的Header, 默認情況網關僅緩存
Content-Type
,Content-Encoding
,Content-Language
頭,如果你需要更多的Headers, 可使用配置中的cacheableHeaders
配置添加
2. 插件配置
可以選擇JSON或者YAML格式的來配置您的插件,兩種格式的schema相同,可以搜索yaml to json
轉換工具來進行配置格式的轉換,yaml格式的模板見下表。
---
varyByApp: false # 是否按照訪問方的AppId來區分緩存內容, 默認為false
varyByParameters: # 按照不同的參數取值來區分緩存內容
- userId # 參數名稱,如果后端參數映射為不同的名稱,這里請填寫映射后的參數名稱
varyByHeaders: # 是否按照不同的請求Header值來區分緩存內容
- Accept # `Accept`表示按照不同的Accept頭來區分緩存
clientCacheControl: # 允許客戶端通過`Cache-Control`頭來影響緩存策略, 默認`off`
mode: "app" # off: 拒絕所有端, all: 允許所有端, apps: 允許appId取值在`apps`列表中的端
apps: # 如果mode配置為`app`, 則允許`AppId`在以下列表中的取值
- 1992323 # 消費者AppId, 注意不是AppKey
- 1239922 # 消費者AppId, 注意不是AppKey
cacheableHeaders: # 允許緩存的后端Headers, 默認只緩存`Content-Type`和`Content-Length`
- X-Customer-Token # 允許緩存的Header名稱
duration: 3600 # 默認超期的秒數
3. 運行規則
當API網關命中Cache后,返回的應答中會包含頭
X-Ca-Caching: true
4. 使用限制
插件元數據的大小限制為50KB。
超過128K的應答BODY不會被緩存。
對于共享實例/Serverless實例來講,每個用戶每個Region的總限制為1M Bytes,專享實例請參考實例規格說明。