cacheLife
cacheLife
函数用于设置函数或组件的缓存生命周期。它应与 use cache
指令一起使用,并在函数或组件的作用域内调用。
使用方法
要使用 cacheLife
,请先在 next.config.js
文件中启用 dynamicIO
标志:
然后在函数或组件的作用域内导入并调用 cacheLife
函数:
参考
默认缓存配置
Next.js 提供了一组基于不同时间尺度的命名缓存配置。如果在使用 use cache
指令时未在 cacheLife
函数中指定缓存配置,Next.js 会自动应用 default
缓存配置。
但我们建议在使用 use cache
指令时始终添加缓存配置,以明确定义缓存行为。
配置 | stale | revalidate | expire | 描述 |
---|---|---|---|---|
default | 5 分钟 | 15 分钟 | 1 年 | 默认配置,适用于不需要频繁更新的内容 |
seconds | 0 | 1 秒 | 1 秒 | 适用于需要近实时更新的快速变化内容 |
minutes | 5 分钟 | 1 分钟 | 1 小时 | 适用于一小时内频繁更新的内容 |
hours | 5 分钟 | 1 小时 | 1 天 | 适用于每日更新但可以稍有延迟的内容 |
days | 5 分钟 | 1 天 | 1 周 | 适用于每周更新但可以延迟一天的内容 |
weeks | 5 分钟 | 1 周 | 30 天 | 适用于每月更新但可以延迟一周的内容 |
max | 5 分钟 | 30 天 | 1 年 | 适用于极少需要更新的稳定内容 |
用于引用缓存配置的字符串值本身没有内在含义,它们仅作为语义标签使用。这有助于您在代码库中更好地理解和管理缓存内容。
须知:更新
staleTimes
和expireTime
配置选项也会更新default
缓存配置的stale
和expire
属性。
自定义缓存配置
您可以通过在 next.config.ts
文件的 cacheLife
选项中添加配置来定义自定义缓存配置。
缓存配置是包含以下属性的对象:
属性 | 值类型 | 描述 | 要求 |
---|---|---|---|
stale | number | 客户端在不检查服务器的情况下缓存值的持续时间 | 可选 |
revalidate | number | 服务器上缓存刷新的频率;在重新验证期间可能会提供过期的值 | 可选 |
expire | number | 值在切换到动态获取之前可以保持过期的最大持续时间;必须长于 revalidate | 可选 - 必须长于 revalidate |
stale
属性与 staleTimes
设置的不同之处在于它专门控制客户端路由缓存。staleTimes
是影响所有动态和静态数据实例的全局设置,而 cacheLife
配置允许您在每个函数或路由的基础上定义 stale
时间。
须知:
stale
属性不设置Cache-control: max-age
头部。它控制的是客户端路由缓存。
示例
定义可重用的缓存配置
您可以在 next.config.ts
文件中定义可重用的缓存配置。选择一个适合您用例的名称,并为 stale
、revalidate
和 expire
属性设置值。您可以根据需要创建任意数量的自定义缓存配置。每个配置都可以通过其名称作为字符串值传递给 cacheLife
函数来引用。
上面的示例缓存 14 天,每天检查更新,并在 14 天后过期缓存。然后您可以通过其名称在整个应用程序中引用此配置:
覆盖默认缓存配置
虽然默认缓存配置提供了一种有用的方式来思考任何可缓存输出的新鲜度或过期程度,但您可能更喜欢不同的命名配置以更好地与应用程序的缓存策略对齐。
您可以通过创建与默认配置同名的新配置来覆盖默认的命名缓存配置。
以下示例展示如何覆盖默认的 "days" 缓存配置:
内联定义缓存配置
对于特定用例,您可以通过向 cacheLife
函数传递对象来设置自定义缓存配置:
此内联缓存配置仅适用于创建它的函数或文件。如果您想在应用程序中重用相同的配置,可以将其添加到配置中的 next.config.ts
文件的 cacheLife
属性中。
use cache
和 cacheLife
的嵌套使用
在同一路由或组件树中定义多个缓存行为时,如果内部缓存指定了自己的 cacheLife
配置,外部缓存将尊重其中最短的缓存持续时间。这仅适用于外部缓存没有定义自己的显式 cacheLife
配置时。
例如,如果您向页面添加 use cache
指令而不指定缓存配置,将隐式应用默认缓存配置 (cacheLife(”default”)
)。如果导入到页面中的组件也使用带有自己缓存配置的 use cache
指令,则会比较外部和内部缓存配置,并应用配置中设置的最短持续时间。
在单独的文件中,我们定义了导入的子组件: