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

O Laravel 12.9 trouxe uma novidade poderosa: o Memoized Cache Driver. Essa feature otimiza o desempenho das aplicações ao armazenar em memória os valores obtidos do cache durante o tempo de execução da requisição, evitando múltiplos acessos ao cache.

Publicado em: 16, abril 2025

Logo do laravel 12 falando sobre atualizações

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: Laravel Framework PR #55304.

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

/ Autor

Foto do autor do post Lucas Souza (Virgu)

Lucas Souza (Virgu)

{Full-Stack Specialist Engineer}

Mais de 10 anos de experiência com Laravel e sólidos conhecimentos em frameworks front-end, como ReactJS, React Native e Vue JS.
Experiência em Design de Serviço.
No primeiro projeto profissional como júnior, desenvolveu em e-commerce para a maior indústria de equipamentos odontológicos da América Latina. Atualmente, atua como Full Stack Engineer Specialist em uma grande multinacional.
Lidera decisões técnicas e é um suporte fundamental para a equipe de desenvolvimento.