Cache API是一種快取資料的方法。通過Cache API,您可以在邊緣節點上快取資料,以便在下次請求時快速返回資料。Cache API可以設定緩衝時間和緩衝大小,以便更好地控制緩衝策略。
工作原理
通過ER內建的CacheAPI,您可以將ER處理後的結果或從來源站點擷取的資料緩衝到ESA,供其他訪問到同節點的請求複⽤,以減少重複的計算或⽹絡請求。ER和ESA緩衝的關係示意圖如下:
API標準
Cache基本儘可能地遵循標準 Cache。但由於邊緣程式是複用ESA已有的Cache引擎,所以最終語意尚無法做到完全一致。
API定義
cache.put(request/string, response)
將一個Response對象,緩衝到Cache中。
如果put成功,resolve成undefined。
如果由於Cache引擎失敗,reject成error異常。
如果由於Cache引擎的quota超用,reject成error異常。
緩衝的key設定為 request對象的URL 或者直接用string表示URL。(請使用HTTP協議的URL,目前由於ESA Cache引擎的原因不支援設定HTTPS協議的URL)。
這個是個非同步函數,可調用await確保put完成。
Response對象可以設定cache-control頭用於配置Cache的TTL(cache-control頭設定符合Cache標準)。
cache.get(request/string)
獲得一個key為輸入request/string的Response對象(如果對象不存在,resolve成undefined)。
這個是個非同步函數,可調用await確保get完成。
get有可能無法返回剛剛put的對象,因為緩衝的LRU演算法,Cache不保證一定可以取到。
cache.delete(request/string)
刪除一個key為輸入的Response對象。
如果刪除成功,resolve成true。
如果刪除失敗,則resolve成false。
這個是個非同步函數,調用await確保delete完成。
使用限制
以上所有的請求都是子請求,所以共用ER子請求個數的限制。預設一個ER請求的fetch子請求最多不超過32個(這個數字可能將在ER商業化時發生變化)。由於Cache的所有API操作也是子請求,所以他們和fetch共用32個子請求的約束,即cache.put+cache.get+cache.delete+fetch在一個Request上下文中不能超過32個。
cache.put、cache.get和cache.delete都有concurrency control,即針對同一個URL,某個請求在get,另外一個請求在delete的時候,get或者delete有可能返回pending狀態,即該請求目前無法完成(多個並發請求都在同時修改同一個key下的資源導致),建議稍等後重試。
說明cache.put、cache.get和cache.delete reject成true時,表示該操作被concurrency control。
緩衝重新整理
通過CacheAPI存入的緩衝暫不支援主動重新整理,您需要在Cache.put()存入緩衝時通過TTL參數指定合適的緩衝時間。