Dia de deploy, alguém digita cache:flush por costume, e cinco minutos depois começam as reclamações: cliente perdeu o carrinho no meio da compra. Ou pior, a outra loja do mesmo servidor ficou lenta sem motivo aparente.
Os dois comandos limpam cache. Só que um deles não sabe onde termina o Magento e onde começa o resto.
A diferença em uma linha
A documentação da Adobe é direta ao ponto. Limpar um tipo de cache "não afeta outros processos ou aplicações, porque limpa apenas o cache que o Commerce usa". Já o flush "esvazia o armazenamento de cache, o que pode afetar outros processos e aplicações que usem o mesmo armazenamento".
No código a coisa fica mais concreta. O cache:clean chama cleanType() para cada tipo, e isso vira uma limpeza por tag no frontend do cache. O cache:flush pega o backend por baixo e chama clean() nele, sem tag nenhuma — modo "apague tudo".
cache:clean | cache:flush | |
|---|---|---|
| Alcance | as entradas com a tag do tipo | o armazenamento inteiro |
| No Redis | remove chave por chave | FLUSHDB |
| Vizinho no mesmo banco | intacto | apagado junto |
Por que isso derruba o vizinho
O backend Redis do Magento é o Cm_Cache_Backend_Redis. Quando ele recebe o modo "apague tudo", a implementação é literalmente uma linha: flushDb(). O Redis não pergunta de quem é cada chave — ele esvazia o banco.
Se a instalação seguiu o caminho preguiçoso e colocou cache, full page cache e sessão no mesmo database, o cache:flush apaga a sessão de todo mundo que está comprando naquele momento. Se duas lojas dividem o mesmo banco, uma derruba a outra.
Conferir leva dez segundos. No app/etc/env.php:
grep -n "'database'" app/etc/env.phpSe os números repetirem, ou se não houver número nenhum (todo mundo caiu no banco 0), você tem o problema. E do lado do Redis dá para ver o estrago antes de acontecer:
redis-cli INFO keyspace Quando o flush é necessário mesmo
Existe caso legítimo, e ele não é raro. Quando a loja usa cache em dois níveis — o RemoteSynchronizedCache, com uma camada local em disco na frente do Redis —, a camada local não é etiquetada por tag. Uma limpeza por tag não alcança ela, e a entrada velha continua sendo servida.
Está escrito em comentário no próprio Manager.php do framework: o flush precisa purgar o armazenamento inteiro porque uma limpeza por tag é rebaixada e não chega no nível local. Sintoma típico: você roda cache:clean, limpa de novo, e o bloco antigo insiste em aparecer. Aí é flush.
Outro caso é depois de trocar a configuração do próprio cache: mudou prefixo, mudou banco, mudou de Redis para arquivo. Sobra lixo que não pertence a tag nenhuma.
O que eu uso no dia a dia
Regra que aplico em todo cliente: cache:clean por padrão, e sempre nomeando o tipo. Trocou um di.xml? bin/magento cache:clean config. Mexeu num template? block_html e full_page. Limpar os dezoito tipos porque você mexeu em um só é jogar fora cache quente à toa e deixar a loja lenta por vários minutos.
bin/magento cache:clean config block_html full_pageUm detalhe que vale saber: os dois comandos disparam a purga do Varnish quando o full_page está envolvido. O cache:clean dispara o evento adminhtml_cache_flush_system e o cache:flush dispara o adminhtml_cache_flush_all — os dois são ouvidos pelo módulo de invalidação e mandam o PURGE. Então não é o flush que "limpa o Varnish e o clean não": ambos limpam.
Guarde o cache:flush para os dois casos da seção anterior, e antes de rodar confira se o Redis de sessão está em outro banco. Como separar cache, FPC e sessão está no guia de performance e Core Web Vitals.
Perguntas rápidas
cache:flush apaga o cache de página do Varnish também?
Sim, e o cache:clean também. Os dois disparam um evento que o módulo de invalidação escuta para mandar a purga ao Varnish quando o tipo full_page está incluído.
Rodar cache:flush pode derrubar a loja?
Derrubar não, mas causa um pico feio. Toda página passa a ser gerada do zero até o cache reencher, e em loja com tráfego isso vira lentidão e às vezes 502. Em horário de pico, prefira limpar só os tipos que você mexeu.
Preciso de cache:flush depois do setup:upgrade?
Não precisa. O setup:upgrade já invalida o que muda de estrutura, e um cache:clean cobre o resto. O flush ali só serve para prolongar a janela de deploy.
Pra conferir na fonte
- Manage the cache — clean vs. flush — Adobe Experience League
- Cache options and types — Adobe Experience League
- Framework App/Cache/Manager.php — GitHub
- Cm_Cache_Backend_Redis — clean() e flushDb() — GitHub