Cursos Magento

Cache:clean ou cache:flush? Qual devo usar?

,

Publicado em 14 de maio de 2019

Quando começamos a usar o Magento 2, uma das primeiras dúvidas que surgem diz respeito aos comandos cache:clean e cache:flush.

Para que servem? Quais as diferenças entre eles? Quando devo usar um ou outro?

Neste artigo vou esclarecer estas e outras dúvidas, além de mostrar alguns exemplos.

Lembre-se: sempre execute o bin/magento usando o mesmo usuário que é proprietário (owner) dos arquivos da loja.

Quando usar

O Magento possuí diferentes tipos de cache. Em lojas em produção, o ideal é que limpemos somente o cache daquilo que foi alterado.

Veja quando limpar os principais deles:

  • config – depois de alterar, adicionar ou remover alguma configuração da loja
  • layout – após alterar arquivos ou configurações relacionados a layout xml. Em alguns casos pode ser necessário recompilar arquivos estáticos e limpar o full_page.
  • block_html – após alterar blocos (camada view) ou seus templates
  • collections – O Magento limpará automaticamente queries de banco de dados. No entanto, módulos de terceiros podem alterar as entidades de uma forma que o Magento não consegue identificar e limpar por si só.
  • reflection – Relativo a dados das  Reflections das APIs
  • db_ddl – O Magento limpará sozinho, mas módulos de terceiro nem sempre conseguem fazê-lo. Está ligado a alterações e customizações relacionadas a mudanças estruturais em tabelas do banco de dados.
  • compiled_config – Resultado da compilação de código.
  • eav
  • customer_notification – Aquelas notificações na área do usuário.
  • config_integration – Relativo ao arquivo de configuração das integrações.
  • config_integration_api
  • full_page – usado na geração do html final das páginas. Deve ser limpo sempre que uma alteração que impacte algo visual for feita.
  • config_webservice – Estrutura do webservice. Limpar quando fizermos alguma customização ou mudança na configuração das APIs.
  • translate – Quando alteramos ou mesclamos módulos que implementam ou alteram traduções

 

Tanto o cache:flush ou cache:clean  não devem comprometer o funcionamento da loja. No entanto, podem afetar outras aplicações que usem o mesmo storage, como veremos mais pra frente.

Quando limpar todo o cache?

Devemos limpar todo o cache quando atualizamos o Magento para uma nova versão, ou quando um novo módulo é instalado.

Como usar?

A sintaxe de ambos os comandos é a mesma:

bin/magento cache:clean [type] ... [type] ou bin/magento cache:flush [type] ... [type]

Por exemplo: bin/magento cache:clean config full_page para limpar os caches de configurações e full page cache.

 

Cache:flush e Cache:clean no admin

No admin também é possível executar ambos os comandos.

Cache Management Magento 2Mas qual a diferença entre clean e flush?

O cache:clean irá limpar apenas os caches que estão em uso pelo Magento, enquanto o cache:flush limpará todo o storage do cache em questão.

Sendo assim, se você estiver por exemplo usando Redis e mais de uma aplicação fizer uso da mesma database, o cache:flush limpará os dados da outra aplicação também.

O Magento faz uso de cache tags, que devem ser especificadas no momento que um dado é salvo no cache. No entanto, nem sempre estas tags são especificadas. Quando isso ocorre, somente o cache:flush é capaz de limpá-las.

Em outras palavras, podemos dizer que um bin/magento cache:flush será mais ‘poderoso’ que um bin/magento cache:clean.

Indo além

As classes responsáveis pelos comandos cache:clean e cache:flush (no CLI) são a \Magento\Backend\Console\Command\CacheCleanCommand e \Magento\Backend\Console\Command\CacheFlushCommand respectivamente.

Na prática, a diferença entre cache:clean e cache:flush irá variar de acordo com cada tipo de cache que está sendo limpo.

Isso porque cada classe de cache possuí um método clean($mode, $tags). Quando executamos o cache:clean, o $mode passado será ‘matchingTag’, enquanto o cache:flush será ‘all’.

Além disso, como falei, no cache:clean o Magento enviará quais tags foram alteradas em $tags.

E por sua vez, caberá a cada módulo que implementa cada tipo de limpeza de cache e tratar suas diferenças.

Se quiser entender ainda mais sobre isso, adicione um breakpoint em \Cm_Cache_Backend_File::clean ou \Cm_Cache_Backend_Redis::clean caso esteja usando Redis.

Conclusão

De forma geral, o cache:flush é mais poderoso que o cache:clean. Ou seja, ele pode ser mais eficiente na limpeza de caches.

Porém, cada classe de cache é responsável por implementar a forma como lidará com a limpeza dos mesmos e como implementará a limpeza de cache em cada situação.

Desta forma, cada cache do Magento poderá ter um comportamento diferente com cache:clean e cache:flush. É por isso que você encontrará diversas respostas para esta dúvida, já que cada uma delas focará mais em um módulo/aspecto do que outro.

Já no ambiente de desenvolvimento é um pouco mais fácil. Nele eu habilito todos os caches e uso uma ferramenta que detecta qual cache foi alterado, limpando somente aquele que foi alterado.

Saiba mais sobre esta e outras 9 ferramentas para Magento no curso de Magento 2 aqui do Magenteiro.

 

 

Fontes externas:

https://docs.magento.com/m2/ce/user_guide/system/cache-management.html

https://www.mageplaza.com/kb/10-cache-types-how-manage-cache-magento-2.html

 

Imagem principal por ar130405 do Pixabay

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/cache_clean-ou-cache_flush-diferencas/"]