Skip to content

Cache Flexível no Laravel: Como Melhorar Performance sem Perder Atualização

Postado em por na categoria "Laravel"

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:

  1. Período de frescor: Tempo em que os dados são considerados atualizados.
  2. 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! 🚀

End of article