Configuração do cache L2 para otimização do desempenho
O cache L2 (de dois níveis) reduz o tráfego de rede entre o armazenamento remoto em cache (Redis ou Valkey) e o aplicativo Commerce, adicionando uma camada de cache local em cada nó da Web. Uma instância padrão do Commerce transfere cerca de 300 KB por solicitação, e o tráfego pode aumentar rapidamente para mais de 1000 solicitações em algumas situações.
Com o cache L2, cada nó da Web armazena os dados acessados com frequência localmente e usa o cache remoto para duas finalidades:
- Verificando a versão dos dados do cache para garantir que o cache mais recente seja armazenado localmente
- Transferindo dados atualizados do cache do armazenamento remoto para o computador local
O Commerce armazena a versão de dados com hash no cache remoto, com o sufixo :hash anexado à chave regular. Quando o cache local está desatualizado, os dados são obtidos da máquina remota por meio de um adaptador de cache.
Há duas implementações de cache L2 disponíveis:
Cm_Cache_Backend_File para armazenamento localConfiguração herdada do cache L2 (RemoteSynchronizedCache)
As instruções de configuração de cache dependem do tipo de implantação:
-
Para o Adobe Commerce na Nuvem, configure o cache L2 definindo a variável de implantação
REDIS_BACKENDouVALKEY_BACKENDem.magento.env.yaml. Consulte Configurar cache L2 para obter exemplos de configuração. -
Para versões locais do Adobe Commerce com suporte para Redis, use o exemplo a seguir para modificar ou substituir a seção de cache existente no arquivo
app/etc/env.php.
'cache' => [
'frontend' => [
'default' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'remote_backend_options' => [
'persistent' => 0,
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
],
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/'
]
],
'frontend_options' => [
'write_control' => false,
],
]
],
'type' => [
'default' => ['frontend' => 'default'],
],
]
Onde:
-
backendé a implementação do cache L2. -
backend_optionsé a configuração de cache L2.remote_backendé a implementação de cache remoto: Redis ou MySQL.remote_backend_optionsé a configuração de cache remoto.local_backendé a implementação de cache local:Cm_Cache_Backend_Filelocal_backend_optionsé a configuração de cache local.cache_diré uma opção específica de cache de arquivo para o diretório onde o cache local está armazenado.
Para o Adobe Commerce, a Adobe recomenda o uso de Redis para cache remoto (\Magento\Framework\Cache\Backend\Redis) e Cm_Cache_Backend_File para o cache local de dados na memória compartilhada, usando: 'local_backend_options' => ['cache_dir' => '/dev/shm/']
A Adobe recomenda o uso do recurso cache preload, pois ele diminui drasticamente a pressão sobre o Redis. Não se esqueça de adicionar o sufixo ‘:hash’ para chaves de pré-carregamento.
Opções de cache obsoletas
A partir do Commerce 2.4, a opção use_stale_cache pode melhorar o desempenho em casos específicos, disponibilizando dados armazenados em cache anteriormente enquanto novos dados de cache são gerados em um processo paralelo.
Geralmente, a compensação com a espera por bloqueio é aceitável de uma perspectiva de desempenho. No entanto, à medida que o número de blocos ou entradas de cache aumenta, as esperas de bloqueio demoram mais tempo. Em alguns cenários, a espera pode ser de até o número de chaves x tempo limite de pesquisa para o processo. Em casos raros, um comerciante pode ter centenas de chaves no cache do Block/Config, portanto, mesmo um pequeno tempo limite de pesquisa para um bloqueio pode custar segundos.
'use_stale_cache' => true à configuração de nível superior do front-end do cache L2.A Adobe recomenda habilitar a opção use_stale_cache somente para os tipos de cache que mais se beneficiarem dela, incluindo:
block_htmlconfig_integration_apiconfig_integrationfull_pagelayoutreflectiontranslate
A Adobe não recomenda habilitar a opção use_stale_cache para o tipo de cache default.
O código a seguir mostra um exemplo de configuração:
'cache' => [
'frontend' => [
'default' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'remote_backend_options' => [
'persistent' => 0,
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
],
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/'
]
],
'frontend_options' => [
'write_control' => false,
],
],
'stale_cache_enabled' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'remote_backend_options' => [
'persistent' => 0,
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
],
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/'
],
'use_stale_cache' => true,
],
'frontend_options' => [
'write_control' => false,
],
]
],
'type' => [
'default' => ['frontend' => 'default'],
'layout' => ['frontend' => 'stale_cache_enabled'],
'block_html' => ['frontend' => 'stale_cache_enabled'],
'reflection' => ['frontend' => 'stale_cache_enabled'],
'config_integration' => ['frontend' => 'stale_cache_enabled'],
'config_integration_api' => ['frontend' => 'stale_cache_enabled'],
'full_page' => ['frontend' => 'stale_cache_enabled'],
'translate' => ['frontend' => 'stale_cache_enabled']
],
],
Implementação do cache Modern Symfony L2
Nas versões 2.4.9+ do Commerce, use a implementação de cache L2 baseada em cache Symfony (back-end do symfony_l2) em vez do cache L2 herdado. O cache L2 do Symfony fornece uma implementação de cache moderna e compatível com PSR-6, com melhorias significativas de desempenho em relação ao RemoteSynchronizedCache tradicional.
symfony_l2. Para Commerce local, consulte configurar Valkey. Para o Commerce na nuvem, consulte Configurar Valkeysymfony_l2. Se você estiver em uma versão com suporte para symfony_l2, deverá usar Valkey para armazenamento em cache. Consulte Requisitos do sistema paraBenefícios do cache Symfony L2
- Arquitetura Moderna: baseada em componentes do Symfony Cache (compatível com PSR-6)
- Melhor Desempenho: suporte nativo para serialização Igbinary, compactação gzip e scripts Lua
- Conexões Persistentes: reduz a sobrecarga de conexão Valkey com o pool de conexão
- Chaves de pré-carregamento: suporta o pré-carregamento de chaves de cache para dados críticos
- Suporte a Cache Obsoleto: compatibilidade total com a opção
use_stale_cache - Configuração simplificada: nomes de tipo de back-end de limpeza (
valkey,file)
Exemplo de configuração com o cache L2 do Symfony
ece-tools) gerencia a configuração do cache automaticamente. Não editar app/etc/env.php diretamente — a implantação substitui as alterações manuais. Para configuração na nuvem, consulte Configurar o cache L2 do Symfony.Use o tipo de back-end simplificado symfony_l2 para cache L2:
'cache' => [
'frontend' => [
'default' => [
'backend' => 'symfony_l2',
'backend_options' => [
// L2 (Remote): Valkey with Symfony Cache
'remote_backend' => 'valkey',
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'password' => '',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
'persistent_id' => 'magento_l2_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
'use_lua' => '1',
'preload_keys' => [
'prefix_EAV_ENTITY_TYPES:hash',
'prefix_GLOBAL_PLUGIN_LIST:hash',
'prefix_DB_IS_UP_TO_DATE:hash',
'prefix_SYSTEM_DEFAULT:hash',
],
],
// L1 (Local): File cache
'local_backend' => 'file',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_l1'
],
'cleanup_percentage' => 90,
],
]
],
'type' => [
'default' => ['frontend' => 'default'],
],
],
Cache Symfony L2 com cache obsoleto
Configure front-ends separados para suporte a cache obsoleto:
'cache' => [
'frontend' => [
// Default frontend: NO stale cache
'default' => [
'backend' => 'symfony_l2',
'backend_options' => [
'remote_backend' => 'valkey',
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
'persistent_id' => 'magento_l2_default',
],
'local_backend' => 'file',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_l1'
],
],
],
// Stale cache enabled frontend
'stale_cache_enabled' => [
'backend' => 'symfony_l2',
'backend_options' => [
'remote_backend' => 'valkey',
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
'persistent_id' => 'magento_l2_stale',
],
'local_backend' => 'file',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_l1_stale'
],
'use_stale_cache' => true,
],
]
],
'type' => [
'default' => ['frontend' => 'default'],
'layout' => ['frontend' => 'stale_cache_enabled'],
'block_html' => ['frontend' => 'stale_cache_enabled'],
'reflection' => ['frontend' => 'stale_cache_enabled'],
'config_integration' => ['frontend' => 'stale_cache_enabled'],
'config_integration_api' => ['frontend' => 'stale_cache_enabled'],
'full_page' => ['frontend' => 'stale_cache_enabled'],
'translate' => ['frontend' => 'stale_cache_enabled'],
],
],
Opções de back-end para o cache do Symfony L2
remote_backend'valkey'valkey ou file. Use valkey para cache L2.remote_backend_options[]local_backend'file'file ou apculocal_backend_options[]cleanup_percentage95use_stale_cachefalseremote_backend também aceita um valor de redis. No entanto, o Redis não é um serviço de cache oficialmente suportado para o Adobe Commerce 2.4.9 e posterior. A Adobe recomenda configurar o symfony_l2 somente com valkey. Consulte Requisitos do sistema para obter os serviços de cache com suporte por versão.Desempenho e confiabilidade aprimorados do cache Symfony L2
symfony_l2 e estão disponíveis com o patch ACP2E-5132. Consulte Patches da nuvem do Commerce para obter as notas de versão de patch mais recentes.As atualizações mais recentes melhoram a escalabilidade do cache L2 do Symfony, reduzem a E/S desnecessária do sistema de arquivos e melhoram a consistência e a confiabilidade do cache.
Armazenamento otimizado de tags de cache do Symfony L2
Otimização do comportamento do cache do Symfony L2 para implantações com suporte da Valkey, eliminando gravações redundantes de índice de tags no sistema de arquivos. As tags de cache agora são armazenadas exclusivamente no Valkey, alinhando o comportamento do cache Symfony L2 com a implementação do cache herdado. Isso reduz a E/S de disco desnecessária, melhora o desempenho de gravação de cache e impede o crescimento do diretório var/cache/symfony/tags/.
Comportamento aprimorado do cache baseado em arquivos
Para implantações que usam o cache baseado em arquivos (sem Valkey), o índice de tag local continua sendo mantido para oferecer suporte à invalidação do cache. O índice de tag agora é gravado no cache_dir configurado, em vez do local var/cache previamente codificado, garantindo um uso consistente do diretório de cache e melhor suporte para configurações de cache personalizadas.
Correção de associações de tag obsoletas após a retag
A remarcação de uma entrada de cache pode deixá-la associada a tags às quais ela não pertencia mais. As associações de tag obsoletas agora são limpas na remarcação, portanto, as entradas de cache são invalidadas somente pelas tags atribuídas a elas no momento.
Corrigida a gravação remota redundante no salvamento inalterado
Salvar uma entrada de cache com conteúdo inalterado ainda acionava uma gravação no back-end remoto (Valkey). Os salvamentos agora são ignorados quando o conteúdo não é alterado, reduzindo as gravações remotas desnecessárias.
Remoção baseada no tamanho L1 fixa (cleanup_percentage)
O limite cleanup_percentage usado para remoção baseada no tamanho L1 não disparou a limpeza de forma consistente. A remoção do cache L1 agora respeita corretamente o cleanup_percentage configurado.
Adição de bloqueio de regeneração para cache obsoleto
Quando use_stale_cache está habilitado e a cópia remota de uma entrada está temporariamente indisponível, apenas um processo agora adquire um bloqueio de vida curta para regenerar essa entrada. Outras solicitações simultâneas para a mesma entrada continuam a servir o valor local existente em vez de regenerá-lo, reduzindo os carimbos de regeneração e a carga de back-end redundante.
Impacto
- Elimina gravações redundantes de índice de tags do sistema de arquivos para implantações de cache do Symfony L2 com suporte da Valkey, reduzindo a E/S de disco e evitando o crescimento desnecessário do diretório
var/cache/symfony/tags/. - Garante que as implantações de cache baseadas em arquivo usem consistentemente o
cache_dirconfigurado para o índice de tag local, preservando o comportamento de invalidação do cache. - Evita a invalidação incorreta do cache causada por associações de tag obsoletas deixadas para trás após a remarcação.
- Reduz gravações remotas desnecessárias para salvamentos inalterados de cache, diminuindo a carga de rede e back-end.
- Garante que a remoção do cache L1 acione de forma confiável no limite
cleanup_percentageconfigurado. - Reduz os carimbos de regeneração para
use_stale_cacheentradas ao selecionar um único regenerador por chave, em vez de cada solicitação simultânea para recriá-lo.
Para obter opções de configuração detalhadas, consulte: