提供快取功能的中介軟體。
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的快取實現:
從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請求,這與多數框架的預設行為一致。
範例程式碼