[No local]{class="badge informative" title="Aplicável somente a projetos do Adobe Commerce no local."}

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:

Implementação
Versão
Descrição
Herdados (RemoteSynchronizedCache)
<2.4.9
Cache de dois níveis baseado em Zend com Cm_Cache_Backend_File para armazenamento local
Moderno (symfony_l2)
2.4.9+
L2 baseado em cache Symfony com conformidade PSR-6 e desempenho aprimorado. Suporta somente Valkey.

Configuração herdada do cache L2 (RemoteSynchronizedCache)

NOTE
As instruções de configuração do cache L2 herdado se aplicam às versões mais antigas do Adobe Commerce. Se você estiver na versão 2.4.9 ou posterior do Adobe Commerce, use Valkey com o Symfony 2 para cache L2.

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_BACKEND ou VALKEY_BACKEND em .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_File
    • local_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.

IMPORTANT
O cache obsoleto funciona somente com o cache L2. Para habilitá-lo, adicione '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_html
  • config_integration_api
  • config_integration
  • full_page
  • layout
  • reflection
  • translate

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.

IMPORTANT
O cache Redis não é compatível com o Adobe Commerce 2.4.9 ou versões de patch posteriores a 2.4.5-p16, 2.4.6-p14, 2.4.7-p9 e 2.4.8-p5. Se você estiver atualizando para uma versão que não oferece suporte a Redis, configure Valkey e atualize a configuração do cache para usar symfony_l2. Para Commerce local, consulte configurar Valkey. Para o Commerce na nuvem, consulte Configurar Valkey
O Redis não é um back-end remoto com suporte oficial para symfony_l2. Se você estiver em uma versão com suporte para symfony_l2, deverá usar Valkey para armazenamento em cache. Consulte Requisitos do sistema para

Benefí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

NOTE
Para o Adobe Commerce na nuvem, o pacote de Ferramentas ECE (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

Opção
Tipo
Padrão
Descrição
remote_backend
string
'valkey'
Tipo de back-end remoto: valkey ou file. Use valkey para cache L2.
remote_backend_options
matriz
[]
Configuração de back-end remoto (consulte a documentação do Valkey)
local_backend
string
'file'
Tipo de infraestrutura local: file ou apcu
local_backend_options
matriz
[]
Configuração da infraestrutura local
cleanup_percentage
inteiro
95
Limite de limpeza do cache L1 (1-100)
use_stale_cache
booleano
false
Habilitar cache obsoleto para alta disponibilidade
NOTE
A opção remote_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

NOTE
Essas melhorias se aplicam às implantações do Adobe Commerce 2.4.9 que usam o 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_dir configurado 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_percentage configurado.
  • Reduz os carimbos de regeneração para use_stale_cache entradas 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:

recommendation-more-help
commerce-operations-help-configuration