Skip to content

缓存 & SWR

通过设置 options.cacheKeyuseRequest 会将当前请求成功的数据缓存起来。下次组件初始化时,如果有缓存数据,我们会优先返回缓存数据,然后在背后发送新请求,也就是 SWR 的能力。

你可以通过 options.staleTime 设置数据保持新鲜时间,在该时间内,我们认为数据是新鲜的,不会重新发起请求。

你也可以通过 options.cacheTime 设置数据缓存时间,超过该时间,我们会清空该条缓存数据。

SWR

下面的示例,我们设置了 cacheKey,在组件重新加载时,会优先返回缓存的内容,然后在背后重新发起请求。你可以通过点击按钮来体验效果。`

共享

当拥有相同的 cacheKey 时, 同时只会有一个在发起请求,后发起的将会共用同一个请求

当某个 cacheKey 发起请求时,其它相同 cacheKey 的内容均会随之同步

TIP

打开控制台 然后分别点击 Run 按钮, 查看 console.log 的打印

缓存时间

可以通过 cacheTime 设置缓存的回收时间,当缓存数据的时间超过了设定的 cacheTime (默认为 300000 毫秒,即 5 分钟),VueRequest 会自动丢弃该缓存的数据,等到下次发起请求后,重新缓存新的数据。

保鲜时间

如果你能确保缓存下来的数据,在一定时间内不会有任何更新的,你可以设置一个保鲜时间 staleTime (默认为 0,即不保鲜), 当设置保鲜时间后,VueRequest 在该时间内会认为缓存的数据是新鲜的,从而不会发起新的请求,这能为一些定时更新的接口减轻请求的压力。

删除缓存

Vue3Request 提供了一个 clearCache 方法,可以清除指定 cacheKey 或者是所有的缓存数据。

自定义缓存

通过配置 options.setCacheoptions.getCache,可以自定义数据缓存,比如可以将数据存储到 localStorageIndexDB 等。

  • setCachegetCache 需要配套使用。
  • 在自定义缓存模式下,staleTime依旧可用,但是 cacheTimeclearCache 不会生效!请自行实现。

动态缓存

在实际项目中,我们经常需要根据不同的参数来生成不同的缓存 key,比如根据用户 ID、查询条件等。通过动态生成 cacheKey,我们可以为不同的用户或不同的查询条件缓存不同的数据。

下面的示例展示了如何根据用户 ID 动态生成缓存 key,不同的用户会有独立的缓存:

Options

参数说明类型默认值
cacheKey缓存的唯一标识,相同 cacheKey 的请求会共享缓存string | ((params?: P) => string)-
cacheTime缓存数据回收时间,超过该时间会清除缓存(毫秒),如果设置为 -1,则表示缓存数据永不过期number300000 (5 分钟)
staleTime数据保持新鲜时间,在该时间内认为数据是新鲜的,不会重新发起请求(毫秒),如果设置为 -1,则表示数据永远新鲜number0
setCache自定义设置缓存(cacheKey: string, cacheData: CacheParamsType) => void-
getCache自定义读取缓存(cacheKey: string) => CacheParamsType-

贡献者 ☘️

Flame-00

Flame-00

Creator