unstable_cache

unstable_cache 允许您缓存高成本操作(如数据库查询)的结果,并在多个请求间重复使用。

import { getUser } from './data';
import { unstable_cache } from 'next/cache';

const getCachedUser = unstable_cache(
  async (id) => getUser(id),
  ['my-app-user']
);

export default async function Component({ userID }) {
  const user = await getCachedUser(userID);
  ...
}

须知: 不支持在缓存作用域内访问动态数据源(如 headerscookies)。如果需要在缓存函数中使用这些数据,请在缓存函数外部使用 headers,并将所需的动态数据作为参数传入。

警告:此 API 尚不稳定,未来可能变更。随着该 API 的稳定,我们将根据需要提供迁移文档和代码修改工具。

参数

const data = unstable_cache(fetchData, keyParts, options)()
  • fetchData: 这是一个异步函数,用于获取您想要缓存的数据。它必须是一个返回 Promise 的函数。
  • keyParts: 这是一个标识缓存键的数组。必须包含全局唯一值,这些值共同标识被缓存数据的键。缓存键还包括传递给函数的参数。
  • options: 这是一个控制缓存行为的对象,可包含以下属性:
    • tags: 可用于控制缓存失效的标签数组。
    • revalidate: 缓存应重新验证的秒数。省略或传入 false 可无限期缓存,直到调用匹配的 revalidateTag()revalidatePath() 方法。

返回值

unstable_cache 返回一个函数,当调用该函数时,会返回一个解析为缓存数据的 Promise。如果数据不在缓存中,则会调用提供的函数,其结果将被缓存并返回。

版本历史

版本变更说明
v14.0.0引入 unstable_cache 功能。