
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - cacheLife() Function
The cacheLife() Function
The Next.js cacheLife() function is used to set the cache lifetime for a function or component. It must be used alongside "use cache" directive, inside a function or component that you want to cache.
Syntax
Following is the syntax of cacheLife() function:
'use cache' import { unstable_cacheLife as cacheLife } from 'next/cache' export default async function Page() { cacheLife('hours') return <div>Page</div> }
Parameters
The cacheLife() function takes a single parameter:
- timeUnit: A string representing the time unit for the cache lifetime. Possible values are 'seconds', 'minutes', 'hours', 'days', and 'weeks', corresponds to 1 second, 1 minute, 1 hour, 1 day, and 1 week respectively.
Return Value
The cacheLife() function does not return any value.
Enable cacheLife Function
The cacheLife function is an experimental feature in Next.js and needs to be enabled in the next.config.ts file. To enable the cacheLife function, set the experimental.dynamicIO flag to true in the next.config.ts file.
// File - next.config.ts import type { NextConfig } from 'next' const nextConfig: NextConfig = { experimental: { dynamicIO: true, }, } export default nextConfig
Example 1
You can create a reusable cache profile by defining them in your next.config.ts file. Choose a name that suits your use case and set values for the stale, revalidate, and expire properties. You can create as many custom cache profiles as needed. Each profile can be referenced by its name as a string value passed to the cacheLife function
In the code below, we demonstrate how to set up a custom cache profile in next.config.ts and use it in a component.
// File - next.config.ts import type { NextConfig } from 'next' const nextConfig: NextConfig = { experimental: { dynamicIO: true, cacheLife: { biweekly: { stale: 60 * 60 * 24 * 14, // 14 days revalidate: 60 * 60 * 24, // 1 day expire: 60 * 60 * 24 * 14, // 14 days }, }, }, } module.exports = nextConfig // File - app/page.tsx 'use cache' import { unstable_cacheLife as cacheLife } from 'next/cache' export default async function Page() { cacheLife('biweekly') return <div>Page</div> }
Example 2
You can override the default named cache profiles by creating a new configuration with the same name as the defaults. In the code below, we demonstrate how to override the default cache profile in next.config.ts and use it in a component.
// File - next.config.ts const nextConfig = { experimental: { dynamicIO: true, cacheLife: { days: { stale: 3600, // 1 hour revalidate: 900, // 15 minutes expire: 86400, // 1 day }, }, }, } module.exports = nextConfig