Capítulo 102 de 456
'use cache: remote' armazena o output em um cache handler remoto (ex. Redis/KV) em vez de em memória, dando cache durável e compartilhado entre todas as instâncias do servidor. Use quando o use cache in-memory sofre com evicção, restrição de memória ou não persiste entre requests/restarts, ao custo de infraestrutura e latência de rede.
cacheHandlers; provedores de hosting normalmente fornecem automaticamente, self-hosted precisa configurar.cookies()/headers()/searchParams dentro de Suspense); APIs com rate limit; backends lentos; operações caras; serviços instáveis.category em vez de por price filter, ou por language em vez de por userId, aumenta a taxa de hit.use cache normal; remote e use cache: private NUNCA podem se aninhar entre si (nos dois sentidos).buildId/deploymentId, então build novo invalida tudo (mesma regra do use cache).import { connection } from 'next/server'
import { cacheLife, cacheTag } from 'next/cache'
async function getGlobalStats() {
'use cache: remote'
cacheTag('global-stats')
cacheLife({ expire: 60 }) // 1 minute
const stats = await db.analytics.aggregate({
total_users: 'count',
active_sessions: 'count',
revenue: 'sum',
})
return stats
}
connection() força deferimento para request time antes da chamada cacheada.| Feature | use cache | 'use cache: remote' | 'use cache: private' |
|---|---|---|---|
| Server-side caching | In-memory ou cache handler | Remote cache handler | None |
| Cache scope | Shared across all users | Shared across all users | Per-client (browser) |
| Pode acessar cookies/headers direto | No | No | Yes |
| Server cache utilization | Pode ser baixa fora do static shell | Alta (compartilhada entre instâncias) | N/A |
| Custo adicional | None | Infraestrutura (storage, network) | None |
| Persiste entre deploys | No | No | N/A |
| Deployment Option | Supported |
|---|---|
| Node.js server | Yes |
| Docker container | Yes |
| Static export | No |
| Adapters | Yes |
price filter, userId): derruba a taxa de hit; cacheie pela dimensão de poucos valores únicos (categoria, idioma) e filtre o resto em memória.use cache: remote dentro de use cache: private (ou vice-versa): erro, essa combinação nunca é válida.use cache: private; remote é para dado compartilhado entre usuários.use cache in-memory em ambientes serverless/fora do static shell.use cache, use cache: remote, use cache: private) podem ser combinadas na mesma página, cada uma para o tipo certo de dado (estático, compartilhado-runtime, por-usuário).connection() é o mecanismo explícito para forçar deferimento a request time sem precisar ler cookies/headers.cacheLife/cacheTag.