You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js中从unstable_cache移除指定缓存项?

在Next.js DELETE路由中清除unstable_cache指定用户缓存项的方法

问题描述

我在GET API路由中有如下函数实现,请问如何在DELETE路由中从unstable_cache移除ID为x的用户缓存项?

export const GET = async (request: Request, { params }: { params: { id: string } }) => {
  const getUser = async (id: string) => {            
    // user get implementation
    return user;
  };
  // get cached data
  const cachedData = unstable_cache(async (id) => getUser(id), ['user', params.id], 60000);
  const data = await cachedData(params.id);
  return NextResponse.json(data);
}

解决方案

要清除指定ID的用户缓存项,核心是复用与GET路由完全一致的缓存键定位缓存条目,再调用缓存实例的revalidate方法。具体实现步骤如下:

  1. 提取公共逻辑(可选但推荐)
    把getUser函数抽离到公共模块,避免在多路由中重复代码:
// lib/user.ts
export const getUser = async (id: string) => {            
  // user get implementation
  return user;
};
  1. 统一GET路由缓存配置
    改用对象形式配置缓存有效期,保持逻辑清晰:
import { getUser } from '@/lib/user';
import { unstable_cache } from 'next/cache';
import { NextResponse } from 'next/server';

export const GET = async (request: Request, { params }: { params: { id: string } }) => {
  const cachedData = unstable_cache(
    async (id) => getUser(id),
    ['user', params.id], // 缓存键,必须与DELETE路由完全一致
    { revalidate: 60 } // 对应原代码的60000毫秒有效期
  );
  const data = await cachedData(params.id);
  return NextResponse.json(data);
};
  1. 实现DELETE路由的缓存清除逻辑
    创建相同缓存键的unstable_cache实例,调用revalidate方法清除目标缓存:
import { getUser } from '@/lib/user';
import { unstable_cache } from 'next/cache';
import { NextResponse } from 'next/server';

export const DELETE = async (request: Request, { params }: { params: { id: string } }) => {
  // 先执行删除用户的业务逻辑
  // await deleteUser(params.id);

  // 创建与GET路由完全匹配的缓存实例
  const cachedData = unstable_cache(
    async (id) => getUser(id),
    ['user', params.id], // 缓存键必须完全一致
    { revalidate: 60 }
  );

  // 清除该ID对应的缓存项
  await cachedData.revalidate(params.id);

  return NextResponse.json({ message: '用户已删除,缓存已清除' });
};

关键说明

  • 缓存键数组['user', params.id]是定位缓存的核心,必须与GET路由的配置完全一致,否则无法找到目标缓存条目。
  • unstable_cache属于Next.js实验性API,后续版本可能存在API变更,使用时需留意官方文档更新。

内容的提问来源于stack exchange,提问作者coderman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:40:58