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)
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.
A Adobe recomenda usar 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
[2.4.9-beta]{class="badge negative" title="Disponível somente na versão 2.4.9-beta."}
A partir do Commerce 2.4.9, você pode usar a implementação de cache L2 baseada em cache Symfony (back-end do symfony_l2) que fornece uma implementação de cache moderna e compatível com PSR-6, com melhorias significativas de desempenho em relação ao RemoteSynchronizedCache tradicional.
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 Redis ou Valkey com o pool de conexões
- 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 (
redis,valkey,file)
Exemplo de configuração com 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): Redis with Symfony Cache
'remote_backend' => 'redis',
'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' => 'redis',
'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' => 'redis',
'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'redis'redis, valkey ou fileremote_backend_options[]local_backend'file'file ou apculocal_backend_options[]cleanup_percentage90use_stale_cachefalseSuporte ao Valkey
O back-end symfony_l2 também oferece suporte a Valkey como back-end remoto:
'backend_options' => [
'remote_backend' => 'valkey', // Use Valkey instead of Redis
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
],
// ... rest of configuration
]
Para obter opções de configuração detalhadas, consulte: