~ / tutoriais /otimize-sua-aplicacao-laravel-com-o-novo-memoized-cache-driver-laravel-129 $ _

Otimize sua aplicação Laravel com o novo Memoized Cache Driver (Laravel 12.9)

Lucas Souza Lucas Souza 3 min de leitura Tutoriais
Otimize sua aplicação Laravel com o novo Memoized Cache Driver (Laravel 12.9)

A versão 12.9 do Laravel trouxe uma nova funcionalidade importante para otimizar ainda mais suas aplicações: o Memoized Cache Driver. Essa feature permite armazenar temporariamente em memória os valores obtidos do cache durante uma requisição, evitando múltiplas consultas repetitivas ao cache tradicional e melhorando o desempenho geral da sua aplicação.

O que é Memoized Cache Driver?

A nova feature é um driver especial que atua como um decorator em cima de outros drivers de cache já existentes (como Redis, Memcached, Database, etc.). Sua principal função é armazenar em memória os valores obtidos do cache ao longo de uma única execução da aplicação.

Como funciona?

Quando você faz múltiplas chamadas ao cache na mesma requisição, tradicionalmente cada chamada é feita diretamente ao armazenamento externo, causando múltiplos acessos que podem gerar overhead.

Veja o comportamento tradicional:

Cache::get('foo'); // acessa o cache
Cache::get('foo'); // acessa novamente o cache
Cache::get('foo'); // mais um acesso ao cache

Com o Memoized Cache Driver, o comportamento muda:

Cache::memo()->get('foo'); // acessa o cache externo
Cache::memo()->get('foo'); // retorna o valor armazenado em memória
Cache::memo()->get('foo'); // retorna o valor armazenado em memória

Exemplos práticos:

Observe como o Memoized Cache Driver mantém o valor inicial durante a execução da requisição, mesmo que o cache original seja alterado:

Cache::put('name', 'Taylor');
Cache::memo()->get('name'); // "Taylor"

Cache::put('name', 'Tim');
Cache::memo()->get('name'); // Ainda retorna "Taylor"

Especificando Drivers:

Você pode especificar qual driver o Memoized Cache Driver deve usar como base:

// usando driver padrão
Cache::memo()->get('name');

// usando Redis
Cache::memo('redis')->get('name');

// usando Database
Cache::memo('database')->get('name');

Cada driver possui sua própria memória interna, ou seja, valores não são compartilhados entre drivers diferentes:

Cache::driver('redis')->put('name', 'Taylor Redis');
Cache::driver('database')->put('name', 'Taylor Database');

Cache::memo('redis')->get('name'); // "Taylor Redis"
Cache::memo('database')->get('name'); // "Taylor Database"

Cuidados ao utilizar métodos de mutação:

Quando métodos como put, remember, entre outros, são usados, o Memoized Cache Driver automaticamente invalida o valor memoizado para garantir coerência:

Cache::memo()->put('name', 'Taylor'); // grava no Redis e esquece o valor memoizado
Cache::memo()->get('name');           // acessa Redis novamente

Benefícios adicionais:

Uma grande vantagem dessa nova implementação é garantir consistência dentro do mesmo ciclo de execução (request ou job). Mesmo que o valor seja alterado externamente, sua aplicação sempre receberá um valor consistente, evitando bugs ou inconsistências inesperadas:

  • Redução drástica de chamadas externas ao cache.
  • Performance otimizada em processos com múltiplas chamadas repetitivas ao cache.
  • Maior previsibilidade no comportamento da aplicação.

Considerações importantes:

  • Eventos não são disparados pelo Memoized Cache Driver, apenas pelo driver subjacente.
  • A invalidação dos valores memoizados ocorre mesmo se a operação de mutação falhar.

Essa inovação nasceu das observações feitas através da ferramenta Laravel Nightwatch, monitorando aplicativos reais e identificando melhorias práticas para usuários Laravel.

Para mais detalhes, confira diretamente na PR oficial do Laravel Framework #55304.

Experimente já essa nova funcionalidade e veja sua aplicação Laravel ganhar mais performance e estabilidade!

Lucas Souza
Lucas Souza

{AI Engineer} — apaixonado por Laravel, arquitetura de software e construir produtos com impacto. Compartilho aqui tutoriais, descobertas e reflexões sobre o dia a dia de engenharia.

Você também pode gostar

A Importância do Eager Loading no Laravel: Evitando o Problema N+1
Tutoriais

A Importância do Eager Loading no Laravel: Evitando o Problema N+1

O eager loading é uma técnica essencial no Laravel para otimizar o desempenho de aplicações, evitando o problema de consultas N+1. Este artigo explica como o eager loading funciona, os impactos de não utilizá-lo e como configurar o Laravel para prevenir problemas relacionados ao lazy loading, incluindo o uso do recurso de carregamento automático de relacionamentos.

· 5 min
O Laravel é lento? Entenda por que sua aplicação não escala
Tutoriais

O Laravel é lento? Entenda por que sua aplicação não escala

Entenda por que o Laravel não é o culpado pela lentidão das suas aplicações. Neste artigo, mostramos como o conceito de SARGABLE afeta diretamente a performance das suas queries, por que funções como whereDate() destroem índices e como resolver isso com whereBetween().

· 3 min
Laravel Auto CRUD Generator: Automatize CRUD no Laravel
Pacotes

Laravel Auto CRUD Generator: Automatize CRUD no Laravel

O Laravel Auto CRUD Generator, desenvolvido por Abdelrahman Muhammed, automatiza operações CRUD no Laravel. Com um comando, detecta modelos, gera controladores, rotas, validações e mais, seguindo boas práticas. Inclui opções como cURL e Postman para APIs, ideal para agilizar projetos com qualidade.

· 5 min
Tracking 24/7: do agente que responde "quanto custa?" ao agente que avisa "baixou agora"
Tutoriais

Tracking 24/7: do agente que responde "quanto custa?" ao agente que avisa "baixou agora"

Como evoluir do agente que responde "quanto custa?" para o agente que avisa "baixou agora": cron, webhook, idempotência, deduplicação de alerta e janelas de monitoramento sem estourar custo. Com snippets em Laravel e o que muda no harness quando o agente passa a viver sozinho.

· 5 min

VirguIA

beer & code assistant

conectando…

Não foi possível iniciar o chat agora.

tocando