缓存
提供缓存功能的中间件.
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请求,这与多数框架的默认行为一致。
示例代码