AWS
覆盖项
标签缓存

此覆盖由 OpenNext 提供给 NextServer 的 cache 适配器 (opens in a new tab) 使用。如果配置中将 enableCacheInterception 设置为 true,OpenNext 也会使用它,initializationFunction 也用它来预填充缓存。

它用于缓存标签(即 revalidateTagrevalidatePath)。它不处理任何与 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_TABLECACHE_BUCKET_REGION 环境变量。
  • DynamoDB 表应该有一个类型为 String 的主键 path 和一个类型为 String 的排序键 tag。(它可以重用默认 tagCache 使用的同一张表)

dynamodb-lite

DynamoDBLite TagCache 会将缓存标签存储在 DynamoDB 表中。 此实现是 dynamodb TagCache 的轻量版本,因为它使用 aws4fetch 与 DynamoDB 交互。

要求
  • 您需要向服务器提供 CACHE_DYNAMO_TABLECACHE_BUCKET_REGIONAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN 环境变量。
  • DynamoDB 表应该有一个类型为 String 的主键 path 和一个类型为 String 的排序键 tag。(它可以重用默认 tagCache 使用的同一张表)

dynamodb-nextMode

待定

dummy

Dummy TagCache 是一个虚拟实现,会抛出异常。除非您想禁用缓存标签,否则不应使用它。

fs-dev

FsDev TagCache 是一个简单的实现,将缓存标签存储在 .open-next/cache 文件夹中的文件中,并使用文件系统与之交互。仅适用于开发目的。