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 cacheCom 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óriaObserve 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 novamenteUma 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.