Cache:clean ou cache:flush? Qual devo usar?
Desenvolvimento, Magento 2
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.
Mas 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
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/cache_clean-ou-cache_flush-diferencas/"]