Cache Flexível no Laravel: Como Melhorar Performance sem Perder Atualização
O Laravel 11 trouxe um recurso poderoso para otimização de performance: o cache flexível com Cache::flexible()
. Essa abordagem permite servir dados armazenados em cache enquanto eles são atualizados em segundo plano, resolvendo o dilema entre desempenho e dados atualizados.
Neste artigo, vamos explorar como essa funcionalidade funciona, seus benefícios e casos de uso práticos.
📌 O Sistema de TTL em Duas Camadas
O segredo do Cache::flexible()
está no seu sistema de Time To Live (TTL) em duas etapas:
- Período de frescor: Tempo em que os dados são considerados atualizados.
- Período de graça: Tempo em que dados ligeiramente desatualizados ainda podem ser servidos enquanto uma atualização ocorre em segundo plano.
Exemplo básico:
use Illuminate\Support\Facades\Cache;
use Carbon\Carbon;
$value = Cache::flexible(
key: 'meus_dados',
ttl: [
Carbon::minutes(5), // Período de frescor
Carbon::minutes(15) // Tempo total (frescor + graça)
],
callback: function () {
// Operação custosa aqui
}
);
Funcionamento:
- 0 a 5 minutos: Dados frescos, servidos diretamente do cache.
- 5 a 15 minutos: Dados ainda são servidos do cache, mas uma atualização é disparada em segundo plano.
- Após 15 minutos: O cache expira e a próxima requisição aguarda a atualização.
🛒 Caso Prático: Recomendações em E-commerce
Imagine um sistema de recomendações personalizadas em um e-commerce:
$recommendations = Cache::flexible(
key: 'recomendacoes_usuario:' . $userId,
ttl: [
Carbon::minutes(5),
Carbon::minutes(15)
],
callback: function () use ($userId) {
return $this->recommendations->get($userId);
},
lock: ['seconds' => 10] // Evita múltiplas atualizações simultâneas
);
Vantagens:
✔️ Resposta rápida para o usuário
✔️ Atualizações em segundo plano sem travar o sistema
📊 Uso Avançado: Dados de Dashboard
Para dashboards com métricas complexas, podemos usar o cache flexível para balancear atualização e performance:
$stats = Cache::flexible(
key: 'metricas_dashboard',
ttl: [
Carbon::minute(), // Atualiza a cada minuto
Carbon::minutes(10) // Permite dados "um pouco atrasados"
],
callback: function () {
return [
'vendas_totais' => Order::sum('total'),
'novos_usuarios' => User::where('created_at', '>=', now()->subDay())->count(),
'produtos_populares' => Product::withCount('orders')
->orderByDesc('orders_count')
->limit(5)
->get()
];
}
);
⚠️ Quando NÃO Usar Cache Flexível
- Dados sensíveis (ex.: autenticação, tokens)
- Informações que exigem atualização em tempo real
🎯 Conclusão
O Cache::flexible()
do Laravel 11 é uma ferramenta poderosa para melhorar a performance sem sacrificar a atualização dos dados. Com ele, você pode:
✅ Manter respostas rápidas
✅ Evitar processamentos desnecessários
✅ Balancear frescor dos dados e eficiência
Dica: Experimente em cenários onde pequenos atrasos na atualização são aceitáveis, como métricas, recomendações e relatórios.
Quer testar? Atualize para o Laravel 11 e comece a implementar! 🚀