Contextualizando
O que é cache?
Um cache é uma camada de armazenamento físico de dados de alta velocidade que guarda um subconjunto de dados, geralmente temporário por natureza, para que futuras solicitações referentes a esses dados sejam atendidas de modo mais rápido do que é possível fazer ao acessar o local de armazenamento principal de dados. O armazenamento em cache permite reutilizar com eficiência dados recuperados ou computados anteriormente.
Os dados em um cache geralmente são armazenados no hardware de acesso rápido, como uma Random-Access Memory (RAM – Memória de acesso aleatório), e também podem ser usados em paralelo com um componente de software. O principal objetivo de um cache é aumentar a performance da recuperação de dados ao reduzir a necessidade de acessar a camada subjacente mais lenta de armazenamento.
Quais os tipos de cache do Magento?
id | Name | Descrição |
---|---|---|
config | Configuração | O Magento coleta a configuração de todos os módulos, mescla e salva o resultado mesclado no cache. Esse cache contém configurações específicas da loja armazenadas no sistema de arquivos e no banco de dados. |
layout | Layout | Compilados das páginas de layout, ou seja, os componentes de layout de todos os componentes. Deve limpar esse tipo de cache após modificar os arquivos de layout. |
block_html | Saída do Bloco HTML | Fragmentosda página HTML por bloco. Deve limpar esse tipo de cache após modificar a camada de visualização. |
collections | Dados das Coleções | Resultados de consultas de banco de dados. Deve limpar esse tipo de cache se o módulo personalizado usa lógica que resulta em entradas de cache que o Magento não pode limpar. |
db_ddl | DDL | Cache para o esquema do banco de dados. Deve limpar esse tipo de cache depois de fazer alterações personalizadas no esquema do banco de dados. |
compiled_config | Configurações Compiladas | Configuração de compilação. |
eav | Valores dos Atributos das Entidades (EAV) | Metadados relacionados a atributos EAV. Normalmente, não é necessário limpar ou liberar esse tipo de cache. |
full_page | Cache das Páginas | Páginas geradas com HTML. Deve limpar esse tipo de cache após modificar o nível de código que afeta a saída HTML. |
reflection | Reflexão | Remove uma dependência entre o módulo Webapi e o módulo de Cliente. |
translate | Traduções | Cache das traduções. |
config_integration | Configurações de Integração | Deve limpar esse tipo de cache após alterar ou adicionar integrações. |
config_integration_api | Configurações de Integração das APIs | Configuração de integração das APIs compiladas das Integrações da Loja. |
config_webservice | Configurações de Web Services | Armazenando em cache da estrutura da API da Web. |
customer_notification | Notificações de Clientes | Notificações temporárias que aparecem na interface do usuário. |
Código para criação do cache
cache.xml
Este arquivo deve estar localizado na pasta \{Vendor}\{Module}\etc\cache.xml
.
O nó <type>
deve ter o atributo id
, especificando o ID do cache que será criado e pode ter os atributos tranlate
(que espera os atributos que podem ser traduzidos) e instance
(que é a classe de modelo). Este nó também pode ter dois nós filhos, o nó <label>
(que exibirá como o rótulo identificando o nome do cache) e o nó <description>
(que exibirá a descrição sobre o cache).
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Cache/etc/cache.xsd">
<type name="{cache_name}" translate="label,description" instance="{Vendor}\{Module}\Model\Cache\{ClassCacheName}">
<label>{Cache Label}</label>
<description>{Cache Description}</description>
</type>
</config>
Classe
Este arquivo deve extender do arquivo \Magento\Framework\Cache\Frontend\Decorator\TagScope
e definir os valores das constantes TYPE_IDENTIFIER
e CACHE_TAG
.
A constante TYPE_IDENTIFIER
define o identificador exclusivo de um tipo de cache. A constante CACHE_TAG
define a tag exclusiva a ser usada no escopo do tipo de cache.
<?php
namespace {Vendor}\{Module}\Model\Cache;
use Magento\Framework\Cache\Frontend\Decorator\TagScope;
use Magento\Framework\App\Cache\Type\FrontendPool;
class {ClassCacheName} extends TagScope
{
public const TYPE_IDENTIFIER = '{cache_type_id}';
public const CACHE_TAG = '{CACHE_TYPE_TAG}';
public function __construct(
FrontendPool $cacheFrontendPool
) {
parent::__construct(
$cacheFrontendPool->get(self::TYPE_IDENTIFIER),
self::CACHE_TAG
);
}
}
Interagindo com o objeto de Cache
Para criar, remover, carregar ou fazer alguma outra interação com o cache personalizado é possível instanciando a classe (que foi indicada no atributo instance
do arquivo cache.xml
) e acessar os métodos herdados.
<?php
namespace {Vendor}\{Module}\{Directory};
use {Vendor}\{Module}\Model\Cache\{ClassCacheName};
class {Class}
{
public function __construct(
private {ClassCacheName} $customCache
) {
}
public function isEnabledCache(): bool
{
return $this->customCache->isEnabled('{cache_id}');
}
public function saveCache($data)
{
...
$this->customCache->save($data, '{cache_id}');
...
}
public function loadCache()
{
...
return $this->customCache->load('{cache_id}');
}
public function cleanCache()
{
...
$this->customCache->clean('{cache_id}');
...
}
}
Para saber todos os métodos possíveis, basta acessar a classe pai da classe instanciada e verificar os métodos disponíveis.
Comandos
É possível verificar o status de cada cache através do seguinte comando:
bin/magento cache:status
Caso o cache esteja ativo aparecerá com o valor 1
, e caso esteja desabilitado com o valor 0
.
O seguinte comando permite habilitar ou desabilitar todos os tipos de caches ou apenas um cache específico, se passar o ID como argumento.
# Habilitar todos os caches
bin/magento cache:enable
# Habilitar um cache específico
bin/magento cache:enable {cache_type}
# Desabilitar todos os caches
bin/magento cache:disable
# Desabilitar um cache específico
bin/magento cache:disable {cache_type}
Para limpar itens desatualizados do cache é possível apagá-los através do seguinte comando:
# Limpar todos os caches que estão em uso
bin/magento cache:clean
# Limpar um cache específico que está em uso
bin/magento cache:clean {cache_type}
# Apagar todos dos dados dos caches
bin/magento cache:flush
# Apagar todos os dados de um cache específico
bin/magento cache:flush {cache_type}
Finalizando
Valores entre chaves (
{test}
) devem ser alterados na implementação do código.
Habilitando as alterações
Apague os arquivos que são gerados na compilação do Magento e execute o comando PHP para gerar a configuração das injeções de dependência e todas as classes ausentes que precisam ser geradas (proxys, interceptors, etc) e para limpar todos os caches de armazenamento em cache do processos.
rm -rf var/generation/
rm -rf generated/
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento flush
Diretórios e Arquivos
Segue a a lista de diretórios e arquivos que devem ser criados.
- app/
- code/
- {Vendor}/
- {Module}/
- etc/
- cache.xml
- module.xml
- Model/
- Cache/
- {ClassCacheName}.php
- registration.php
- composer.json