此覆盖由 OpenNext 提供给 NextServer 的 cache 适配器 (opens in a new tab) 使用。如果配置中将 enableCacheInterception 设置为 true,OpenNext 也会使用它,initializationFunction 也用它来预填充缓存。
它用于缓存标签(即 revalidateTag 和 revalidatePath)。它不处理任何与 Next.js 使用的 ISR/SSG 缓存或 fetch 缓存相关的内容。
它的主要作用是根据标签确定路径是否过时,并在调用 revalidateTag 时更新标签缓存。
当前的实现与 Next.js standalone 处理缓存标签的方式不同。在 standalone 版本中,缓存标签存储在文件中,每次访问缓存条目时,都必须检查每个标签以确认条目是否过时。这种方法读取密集型很高,并且与 DynamoDB 这样的数据库配合不佳。
我们选择了另一种方式。我们为缓存中存在的每个路径存储标签。这样,我们只需检查路径而不是每个使用的标签,就可以轻松知道路径是否过时。这种方法更侧重于写入,但这是我们愿意做出的权衡。
这也有一个缺点,即需要使用应用程序中使用的所有标签预填充缓存。这是由 initializationFunction 完成的。
未来我们可能会允许根据 TagCache 实现来选择如何处理缓存标签。如果您需要此功能,请随时在 GitHub 仓库 (opens in a new tab) 上提交 issue。
如果您想更好地了解如何实现自己的 TagCache,最简单的方法是查看现有的 内置 TagCache (opens in a new tab)。
内置 TagCache
dynamodb
DynamoDB TagCache 会将缓存标签存储在 DynamoDB 表中。如果您在配置中未提供任何 TagCache,则默认使用它。
它使用 @aws-sdk/client-dynamodb 与 DynamoDB 交互。
要求
- 您需要向服务器提供
CACHE_DYNAMO_TABLE、CACHE_BUCKET_REGION环境变量。 - DynamoDB 表应该有一个类型为
String的主键path和一个类型为String的排序键tag。(它可以重用默认tagCache使用的同一张表)
dynamodb-lite
DynamoDBLite TagCache 会将缓存标签存储在 DynamoDB 表中。
此实现是 dynamodb TagCache 的轻量版本,因为它使用 aws4fetch 与 DynamoDB 交互。
要求
- 您需要向服务器提供
CACHE_DYNAMO_TABLE、CACHE_BUCKET_REGION、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_SESSION_TOKEN环境变量。 - DynamoDB 表应该有一个类型为
String的主键path和一个类型为String的排序键tag。(它可以重用默认tagCache使用的同一张表)
dynamodb-nextMode
待定
dummy
Dummy TagCache 是一个虚拟实现,会抛出异常。除非您想禁用缓存标签,否则不应使用它。
fs-dev
FsDev TagCache 是一个简单的实现,将缓存标签存储在 .open-next/cache 文件夹中的文件中,并使用文件系统与之交互。仅适用于开发目的。