Publicado em: 16, abril 2025
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.
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.
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
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\"
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\"
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
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:
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!
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.