cacheTag
Source URL: https://nextjs.org/docs/app/api-reference/functions/cacheTag
cacheTag
Section titled “cacheTag”The cacheTag function allows you to tag cached data for on-demand invalidation. By associating tags with cache entries, you can selectively purge or revalidate specific cache entries without affecting other cached data.
To use cacheTag, enable the cacheComponents flag in your next.config.js file:
import type { NextConfig } from 'next'
const nextConfig: NextConfig = { cacheComponents: true,}
export default nextConfigconst nextConfig = { cacheComponents: true,}
export default nextConfigThe cacheTag function takes one or more string values.
import { cacheTag } from 'next/cache'
export async function getData() { 'use cache' cacheTag('my-data') const data = await fetch('/api/data') return data}import { cacheTag } from 'next/cache'
export async function getData() { 'use cache' cacheTag('my-data') const data = await fetch('/api/data') return data}You can then purge the cache on-demand using revalidateTag API in another function, for example, a route handler or Server Action:
'use server'
import { revalidateTag } from 'next/cache'
export default async function submit() { await addPost() revalidateTag('my-data')}'use server'
import { revalidateTag } from 'next/cache'
export default async function submit() { await addPost() revalidateTag('my-data')}Good to know
Section titled “Good to know”- Idempotent Tags: Applying the same tag multiple times has no additional effect.
- Multiple Tags: You can assign multiple tags to a single cache entry by passing multiple string values to
cacheTag.
cacheTag('tag-one', 'tag-two')- Limits: The max length for a custom tag is 256 characters and the max tag items is 128.
Examples
Section titled “Examples”Tagging components or functions
Section titled “Tagging components or functions”Tag your cached data by calling cacheTag within a cached function or component:
import { cacheTag } from 'next/cache'
interface BookingsProps { type: string}
export async function Bookings({ type = 'haircut' }: BookingsProps) { 'use cache' cacheTag('bookings-data')
async function getBookingsData() { const data = await fetch(`/api/bookings?type=${encodeURIComponent(type)}`) return data }
return //...}import { cacheTag } from 'next/cache'
export async function Bookings({ type = 'haircut' }) { 'use cache' cacheTag('bookings-data')
async function getBookingsData() { const data = await fetch(`/api/bookings?type=${encodeURIComponent(type)}`) return data }
return //...}Creating tags from external data
Section titled “Creating tags from external data”You can use the data returned from an async function to tag the cache entry.
import { cacheTag } from 'next/cache'
interface BookingsProps { type: string}
export async function Bookings({ type = 'haircut' }: BookingsProps) { async function getBookingsData() { 'use cache' const data = await fetch(`/api/bookings?type=${encodeURIComponent(type)}`) cacheTag('bookings-data', data.id) return data } return //...}import { cacheTag } from 'next/cache'
export async function Bookings({ type = 'haircut' }) { async function getBookingsData() { 'use cache' const data = await fetch(`/api/bookings?type=${encodeURIComponent(type)}`) cacheTag('bookings-data', data.id) return data } return //...}Invalidating tagged cache
Section titled “Invalidating tagged cache”Using revalidateTag, you can invalidate the cache for a specific tag when needed:
'use server'
import { revalidateTag } from 'next/cache'
export async function updateBookings() { await updateBookingData() revalidateTag('bookings-data')}'use server'
import { revalidateTag } from 'next/cache'
export async function updateBookings() { await updateBookingData() revalidateTag('bookings-data')}Related
Section titled “Related”View related API references.
- cacheComponents
- Learn how to enable the cacheComponents flag in Next.js.
- use cache
- Learn how to use the “use cache” directive to cache data in your Next.js application.
- revalidateTag
- API Reference for the revalidateTag function.
- cacheLife
- Learn how to use the cacheLife function to set the cache expiration time for a cached function or component.