快取
提供快取功能的中介軟體。
Cache 中介軟體可以對 Response 中的 StatusCode、Headers、Body 提供快取功能。對於已經快取的內容,當下次處理請求時,Cache 中介軟體會直接把快取在記憶體中的內容傳送給客戶端。
注意,此外掛不會快取 Body 是 ResBody::Stream 的 Response。如果應用到這一類型的 Response,Cache 不會處理這些請求,也不會引起錯誤。
主要功能
-
CacheIssuer提供了對分配的快取鍵值的抽象。RequestIssuer是它的一個實現,可以定義依據請求的 URL 的哪些部分以及請求的Method產生快取的鍵。你也可以定義你自己的快取鍵產生邏輯。快取的鍵不一定是字串類型,任何滿足Hash + Eq + Send + Sync + 'static約束的類型都可以作為鍵。 -
CacheStore提供對資料的存取操作。MokaStore是內建的基於moka的一個記憶體快取實現。你也可以定義自己的實現方式。 -
Cache是實現了Handler的結構體,內部還有一個skipper欄位,可以指定跳過某些不需要快取的請求。預設情況下,會使用MethodSkipper跳過除了Method::GET以外的所有請求。內部實現範例程式碼:
從其他框架快速遷移
如果你之前使用過其他框架的快取機制,下面的概念對映將幫助你更快適應 Salvo 的快取實現:
Rust 框架遷移指南
-
從 Actix-web 遷移:Actix-web 中的
actix-web-cache等外掛通常需要單獨引入,而 Salvo 的快取是核心函式庫的一部分。
其他語言框架遷移指南
-
從 Go/Gin 遷移:Gin 使用中介軟體模式,Salvo 也採用類似的方式:
-
從 Spring Boot 遷移:Spring Boot 的宣告式快取需要轉換為 Salvo 的顯式中介軟體配置:
-
從 Express.js 遷移:Express 的快取中介軟體與 Salvo 概念上類似,但語法不同:
在從其他框架遷移時,需要注意 Salvo 快取的幾個關鍵概念:
- 快取鍵產生 - 透過
CacheIssuer介面控制 - 快取儲存 - 透過
CacheStore介面實現 - 快取跳過邏輯 - 透過
skipper機制自訂
預設情況下,Salvo 僅快取 GET 請求,這與多數框架的預設行為一致。
範例程式碼