问题描述
我正在开发一个使用 SWR 的 Next JS 项目,想知道 SWR 的缓存存储在哪里,是在客户端还是在服务器中?
我问是因为如果它在客户端上,所以每个用户的缓存都不同,那么我可以发出特定于用户的请求,而不必担心缓存会向用户显示其他用户的数据
解决方法
来自文档 cache:
默认情况下,SWR 使用全局缓存在所有组件之间存储和共享数据。现在,有一种新方法可以使用您自己的缓存提供程序对其进行自定义。
SWR 使用 Map 数据类型作为默认缓存提供者
您可以使用 JavaScript Map
数据类型(如 const provider = new Map()
)创建缓存提供程序。
理论上,您可以使用任何数据类型、状态管理库(例如 redux
、网络存储、cookies
、IndexDB)作为您的缓存提供程序。
缓存提供者必须符合以下定义:
interface Cache<Data = any> {
get(key: string): Data | null | undefined
set(key: string,value: Data): void
delete(key: string): void
}
出于性能考虑,客户端内存缓存,网页存储读写速度非常快,所以最好使用客户端缓存。
服务端缓存一般采用Redis等分布式缓存技术。