Laravel Cache

Laravel
Tempo de leitura: 4 minutos

O Laravel Cache é um sistema essencial para otimizar o desempenho de qualquer aplicação web. Ele permite que você armazene temporariamente dados que são caros de calcular ou lentos de recuperar (como resultados de consultas complexas, dados de APIs externas ou renderizações de Views). Ao evitar a execução repetida de processos demorados, o cache reduz a carga no banco de dados e proporciona um carregamento de página significativamente mais rápido.

1. 📂 Configuração e Drivers de Cache

O Laravel oferece uma API unificada que pode trabalhar com diversos backends de armazenamento, chamados Drivers.

A. Configuração Padrão

O arquivo config/cache.php define o driver padrão e as configurações de conexão para cada store (loja).

PHP

// config/cache.php
'default' => env('CACHE_DRIVER', 'file'), // Driver padrão (definido no .env)

'stores' => [
    // Opções de armazenamento...
    'file' => [
        'driver' => 'file',
        'path' => storage_path('framework/cache'), // Armazena em arquivos (default)
    ],
    'redis' => [
        'driver' => 'redis',
        'connection' => 'cache', // Usa a conexão 'cache' definida em config/database.php
    ],
    // 'database', 'memcached', 'array'
]

B. O Driver Mais Rápido

Embora o driver file seja o padrão e mais simples, o redis ou memcached são os drivers mais rápidos e recomendados para aplicações de alto desempenho, pois mantêm os dados na memória (RAM) e são otimizados para acesso rápido.

2. 📝 API de Cache: Armazenar, Recuperar e Verificar

A Facade Cache fornece a interface primária para interagir com o sistema de cache.

A. Armazenar Dados

MétodoFunçãoExemplo
put(key, value, time)Armazena o valor por um tempo definido (em segundos ou DateTime).Cache::put('users.all', $users, 600); (10 minutos)
remember(key, time, closure)Melhor Prática: Tenta recuperar a chave. Se não existir, executa a função (closure), armazena o resultado e o retorna.$posts = Cache::remember('all_posts', 3600, function () { return Post::all(); });
add(key, value, time)Armazena o valor apenas se a chave não existir. Retorna true em caso de sucesso.Cache::add('lock:process', true, 60);

B. Recuperar Dados

MétodoFunçãoExemplo
get(key, default)Recupera a chave. Retorna null ou o valor padrão se a chave não for encontrada.$value = Cache::get('config.theme', 'light');
has(key)Verifica se a chave existe no cache.if (Cache::has('product:3')) { /* ... */ }
forget(key)Remove uma chave específica.Cache::forget('users.all');
flush()Remove TUDO do cache da store padrão. Cuidado ao usar!Cache::flush();

3. 🏷️ Cache Tags (Agrupamento)

Em stores que suportam (como redis e memcached), as Cache Tags permitem que você agrupe itens relacionados e os invalide simultaneamente. Isso é crucial para dados que se referem a um mesmo Model.

A. Uso de Tags

Você usa o método tags() antes de armazenar ou recuperar:

PHP

// Armazenar: Associa os dados às tags 'users' e 'reports'
Cache::tags(['users', 'reports'])->put('user:1:report', $report, 3600);

// Recuperar
$report = Cache::tags(['users', 'reports'])->get('user:1:report');

B. Invalidação Rápida

Quando um Model é atualizado, você pode invalidar todos os itens relacionados de uma só vez:

PHP

// Limpa todos os itens que foram armazenados com a tag 'users'
Cache::tags('users')->flush(); 

4. 🛠️ Customizando Drivers

O Laravel oferece uma grande flexibilidade para personalizar o sistema de cache. Ao criar um driver customizado, por exemplo, você pode integrar sua aplicação com sistemas de armazenamento específicos ou implementar lógicas de cache mais complexas.

A. Implementação da Interface

A classe do seu driver (App\Cache\FileCacheStore) deve implementar a interface Illuminate\Contracts\Cache\Store, garantindo que todos os métodos essenciais (get, put, forget, etc.) sejam definidos.

B. Registro do Driver no Service Provider

Para o Laravel reconhecer o novo driver, ele deve ser registrado em um Service Provider (geralmente AppServiceProvider):

PHP

// App\Providers\AppServiceProvider.php
use Illuminate\Support\Facades\Cache;
use App\Cache\FileCacheStore; // Sua classe

public function boot()
{
    Cache::extend('custom_file', function ($app, $config) {
        // Retorna a instância da sua loja personalizada
        return Cache::repository(new FileCacheStore($config['path']));
    });
}

C. Uso da Store Customizada

Depois de registrado e configurado em config/cache.php, use-o especificando o nome da store:

PHP

use Illuminate\Support\Facades\Cache;

// Usa o driver 'custom_file' em vez do padrão
Cache::store('custom_file')->put('my_key', 'meu valor', 10);

✅ Conclusão Laravel Cache

Laravel Cache: O Cache é uma ferramenta indispensável para a otimização de desempenho. Priorize drivers de memória como Redis ou Memcached em produção. O método Cache::remember() é a melhor prática para o dia a dia. Ao utilizar Cache Tags, você mantém a invalidação de dados relacionados simples e eficiente, garantindo que sua aplicação permaneça rápida e escalável.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.