Práticas recomendadas para a configuração do serviço Redis e Valkey
Use essas recomendações para configurar o Redis ou o Valkey para cache e sessões do Adobe Commerce.
- Configurar cache L2
- Habilitar conexão subordinada
- Pré-carregar chaves
- Habilitar cache obsoleto
- Separar cache e sessão
- Compactar o cache
- Exemplos de configuração
ece-tools. Caso contrário, atualize para a versão mais recente. Você pode verificar a versão instalada em seu ambiente local usando o comando da CLI do composer show magento/ece-tools.Configurar cache L2
Configure o cache L2 definindo a variável de implantação REDIS_BACKEND ou VALKEY_BACKEND no arquivo de configuração .magento.env.yaml.
Para Redis, use:
| code language-yaml |
|---|
|
Para obter a configuração do ambiente na infraestrutura em nuvem, consulte a referência de configuração REDIS_BACKEND no Guia do Commerce na Infraestrutura em Nuvem.
Para instalações locais, consulte Configurar o cache de página do Redis no Guia de Configuração.
Para Valkey, use:
| code language-yaml |
|---|
|
Para obter a configuração do ambiente na infraestrutura em nuvem, consulte a referência de configuração VALKEY_BACKEND no Guia do Commerce na Infraestrutura em Nuvem.
Para instalações locais, consulte Configurar Valkey no Guia de Configuração.
Dimensionamento da memória cache L2 para a Adobe Commerce Cloud
O cache L2 usa um sistema de arquivos temporário (/dev/shm) como seu mecanismo de armazenamento. Diferentemente dos armazenamentos de valores-chave especializados, o tmpfs não tem uma política de remoção de chaves, portanto o uso da memória pode crescer sem limites. Para evitar a exaustão, o Adobe Commerce limpa automaticamente o armazenamento L2 quando o uso atinge um limite configurável (95% por padrão). Você pode controlar o consumo de memória solicitando uma montagem /dev/shm maior ou reduzindo o limite de limpeza.
Ajuste o uso máximo da memória cache L2 com base nos requisitos do seu projeto. Use um dos seguintes métodos:
- Crie um tíquete de suporte para ajustar o tamanho de montagem
/dev/shm. Para este cenário, a Adobe recomenda definir o tamanho de montagem do/dev/shmpara 15 GB. - Ajuste a propriedade
cleanup_percentageno nível do aplicativo para limitar o uso do armazenamento e liberar memória disponível para outros serviços.
Você pode ajustar a configuração na configuração de implantação no grupo de configuração de cachecache/frontend/default/backend_options/cleanup_percentage.
cleanup_percentage foi introduzida no Adobe Commerce 2.4.4.Os seguintes exemplos mostram o código de configuração no arquivo .magento.env.yaml:
| code language-yaml |
|---|
|
| code language-yaml |
|---|
|
Os requisitos de cache variam de acordo com a configuração do seu projeto e o código personalizado de terceiros. Dimensione a memória cache L2 para que o cache possa operar sem ocorrências frequentes de limite.
Idealmente, o uso da memória cache L2 estabiliza abaixo do limite para evitar a limpeza frequente do armazenamento.
Você pode verificar o uso da memória de armazenamento em cache L2 em cada nó do cluster executando o seguinte comando da CLI e revisando a linha /dev/shm.
df -h /dev/shm
O uso pode variar entre nós, mas deve convergir para um valor semelhante.
Configurar diretórios personalizados para o cache L2
Ao otimizar o desempenho do cache L2, você pode optar por armazenar os arquivos do cache local em um diretório personalizado de alto desempenho, como um disco RAM (/dev/shm/).
Para garantir a consistência em todo o aplicativo e evitar o armazenamento fragmentado em cache, configure as opções de back-end L2 específicas e o registro do diretório global dentro do arquivo app/etc/env.php.
Prática recomendada: Defina local_backend_options['cache_dir'] e o directories['cache']['path'] global.
local_backend_options['cache_dir']: Direciona o adaptador de cache de back-end (por exemplo,Cm_Cache_Backend_File) para armazenar seus arquivos de cache L2 sincronizados no local especificado.directories['cache']['path']: atualiza o RegistroDirectoryListdo Adobe Commerce, estabelecendo o caminho personalizado como o diretório de cache de sistema definitivo para todo o aplicativo.
Evitar falhas de diretórios de cache dividido e segmentação do GlusterFS
Se você definir o caminho personalizado exclusivamente no local_backend_options, o mecanismo de cache L2 funcionará corretamente, mas o registro do aplicativo global continuará a reconhecer o var/cache como o local de cache padrão.
Essa incompatibilidade de configuração resulta em um cenário de "divisão de cérebro" em que extensões de terceiros ou processos principais de fallback gravam arquivos temporários no diretório var/cache padrão.
Impacto crítico na Adobe Commerce Cloud: em arquiteturas Pro, o diretório var/ é montado em um sistema de arquivos distribuído compartilhado. Forçar a E/S de cache de alta velocidade através dessa montagem de rede sobrecarrega o cliente e é um acionador primário para falhas de segmentação do GlusterFS e paralisações em todo o cluster. A definição de ambas as configurações garante que toda a E/S de cache permaneça estritamente no disco local de alto desempenho.
Exemplo de configuração
Para impor um único diretório de cache unificado, atualize seu arquivo env.php para incluir ambas as configurações:
return [
// 1. Override the global directory registry
'directories' => [
'cache' => [
'path' => '/dev/shm/magento_cache'
]
],
// 2. Configure the L2 cache engine
'cache' => [
'frontend' => [
'default' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'server' => '127.0.0.1',
'port' => '6379',
'database' => '1',
// ... other redis configurations ...
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_cache'
]
]
]
]
],
// ...
];
Habilitar conexão subordinada
Habilite a conexão subordinada no arquivo .magento.env.yaml para permitir que o Adobe Commerce use uma conexão de cache somente leitura adicional para leituras, ao mesmo tempo em que continua usando o ponto de extremidade primário para gravações. Essa configuração pode reduzir a carga de leitura no serviço de cache principal e distribuir o tráfego de leitura com mais eficiência.
Para Redis, use:
| code language-yaml |
|---|
|
Para obter a configuração do ambiente na infraestrutura do Commerce Cloud, consulte REDIS_USE_SLAVE_CONNECTION no Guia de Infraestrutura do Commerce na Nuvem.
Para instalações locais do Adobe Commerce, configure a nova implementação do cache Redis usando os comandos bin/magento setup. Consulte Usar Redis para cache padrão no Guia de Configuração.
Para Valkey, use:
| code language-yaml |
|---|
|
Para obter a configuração do ambiente na infraestrutura do Commerce Cloud, consulte VALKEY_USE_SLAVE_CONNECTION no Guia de Infraestrutura do Commerce na Nuvem.
Para instalações locais do Adobe Commerce, configure a nova implementação do cache Valkey usando os comandos bin/magento setup. Consulte Configurar Valkey no Guia de Configuração.
Pré-carregar chaves
O Magento geralmente carrega entradas de cache de Redis ou Valkey, uma chave por vez. O recurso de pré-carregamento permite fornecer uma lista de chaves usadas com frequência que o Magento busca em um único pipeline no primeiro acesso durante uma solicitação. O Magento então mantém os valores obtidos na memória PHP para o resto dessa solicitação, o que reduz viagens de ida e volta repetidas para Redis ou Valkey e pode melhorar o desempenho de inicialização da solicitação para essas chaves.
Você pode identificar chaves usadas com frequência monitorando comandos ativos em Redis ou Valkey:
As chaves de pré-carregamento estão configuradas no arquivo de configuração .magento.env.yaml.
| code language-yaml |
|---|
|
Para listar as chaves, execute o seguinte comando:
| code language-terminal |
|---|
|
Após 10 segundos, pressione Ctrl+C. Em seguida, execute o seguinte comando:
| code language-terminal |
|---|
|
Este log lista as chaves que você pode pré-carregar. Para ver o conteúdo de uma chave, execute o seguinte comando:
| code language-terminal |
|---|
|
Para instalações locais, consulte o recurso de pré-carregamento Redis no Guia de Configuração.
As chaves de pré-carregamento estão configuradas no arquivo de configuração .magento.env.yaml.
| code language-yaml |
|---|
|
Para listar as chaves, execute o seguinte comando:
| code language-terminal |
|---|
|
Após 10 segundos, pressione Ctrl+C. Em seguida, execute o seguinte comando:
| code language-terminal |
|---|
|
Este log lista as chaves que você pode pré-carregar. Para ver o conteúdo de uma chave, execute o seguinte comando:
| code language-terminal |
|---|
|
Para instalações locais, consulte Recurso de pré-carregamento de Valkey no Guia de Configuração.
Habilitar cache obsoleto
O cache obsoleto é um recurso de cache L2 de RemoteSynchronizedCache. Quando habilitada, a Adobe Commerce pode fornecer um valor de cache local existente de /dev/shm enquanto outra solicitação já está regenerando a mesma entrada, em vez de fazer com que cada solicitação simultânea aguarde. Isso reduz os carimbos do cache e a contenção de bloqueio durante a regeneração de entradas de cache caras.
Como funciona
Com RemoteSynchronizedCache, o Magento mantém duas cópias de cada entrada de cache: uma cópia local em /dev/shm e uma cópia remota em Redis ou Valkey. Quando a cópia remota não está disponível e já existe um bloqueio de regeneração para essa chave, as solicitações simultâneas podem receber o valor local anterior em vez de aguardar até que o valor novo seja gravado.
Para habilitar o cache obsoleto, configure-o no arquivo .magento.env.yaml.
Redis:
| code language-yaml |
|---|
|
Para Valkey:
| code language-yaml |
|---|
|
full_page não é relevante para projetos de infraestrutura do Adobe Commerce na nuvem porque eles usam Fastly.Para instalações locais, consulte Opções de cache obsoleto no Guia de Configuração.
default, o que aplica o comportamento de cache obsoleto a todas as entradas de cache que usam esse front-end. Os principais tipos de cache do Magento geralmente funcionam como esperado com essa configuração. No entanto, se o seu projeto incluir código personalizado ou extensões que gravam no cache por meio da API \Magento\Framework\App\Cache genérica (por exemplo, $this->cache->save()) sem um front-end de cache dedicado, essas entradas também poderão servir valores obsoletos durante a regeneração.default e habilite-o somente para os tipos de cache selecionados, como geralmente é feito no local.Habilitando cache obsoleto por tipo de cache individualmente
Você pode habilitar o cache obsoleto apenas para os tipos de cache selecionados definindo um front-end de cache dedicado no .magento.env.yaml e mapeando os tipos de cache selecionados para ele.
Para funcionar corretamente, o front-end personalizado deve ser definido como um front-end completo em CACHE_CONFIGURATION.frontend. Definir apenas use_stale_cache: true para um novo nome de front-end não é suficiente.
Exemplo de configurações
Redis:
| code language-yaml |
|---|
|
Para Valkey:
| code language-yaml |
|---|
|
stale_cache_enabled para que o novo front-end mantenha o mesmo comportamento.Instâncias separadas de cache e sessão
Separar o cache das sessões permite que você as gerencie independentemente. Ele reduz a contenção entre o cache e o tráfego da sessão, impede que a pressão relacionada ao cache afete as sessões e permite que cada instância Redis ou Valkey seja dimensionada e ajustada para sua própria carga de trabalho.
Siga as etapas abaixo para provisionar uma instância dedicada para sessões:
-
Atualize o arquivo de configuração
.magento/services.yaml.code language-yaml mysql: type: mysql:10.4 disk: 35000 redis: type: redis:6.0 redis-session: # This is for the new Redis instance type: redis:6.0 search: type: elasticsearch:7.9 disk: 5000 rabbitmq: type: rabbitmq:3.8 disk: 2048 -
Atualize o arquivo de configuração
.magento.app.yaml.code language-yaml relationships: database: "mysql:mysql" redis: "redis:redis" redis-session: "redis-session:redis" # Relationship of the new Redis instance search: "search:elasticsearch" rabbitmq: "rabbitmq:rabbitmq" -
Solicite uma nova instância de Redis dedicada às sessões nos ambientes de produção e preparo.
Envie um tíquete de Suporte da Adobe Commerce. Inclua os arquivos de configuração
.magento/services.yamle.magento.app.yamlatualizados.Essa atualização não causa tempo de inatividade, mas requer uma implantação para ativar o novo serviço.
-
Verifique se a nova instância está em execução e observe o número da porta.
code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp -
Adicione o número da porta ao arquivo de configuração
.magento.env.yaml.note important IMPORTANT Configure a porta da sessão Redis somente se ece-toolsnão puder detectá-la automaticamente na definição do serviço de sessão RedisMAGENTO_CLOUD_RELATIONSHIPS.note note NOTE Defina disable_lockingcomo1para obter o melhor desempenho. Em casos raros em que as condições de corrida ocorrem devido à alta atividade de sessão simultânea, defina como0para habilitar o bloqueio.code language-yaml SESSION_CONFIGURATION: _merge: true redis: timeout: 5 disable_locking: 1 bot_first_lifetime: 60 bot_lifetime: 7200 max_lifetime: 2592000 min_lifetime: 60 -
Remover sessões do banco de dados padrão (
db 0) na instância de cache Redis.code language-terminal redis-cli -h 127.0.0.1 -p 6370 -n 0 FLUSHDB
-
Atualize o arquivo de configuração
.magento/services.yaml.code language-yaml mysql: type: mysql:10.4 disk: 35000 valkey: type: valkey:8.0 valkey-session: # This is for the new Valkey instance type: valkey:8.0 search: type: elasticsearch:7.9 disk: 5000 rabbitmq: type: rabbitmq:3.8 disk: 2048 -
Atualize o arquivo de configuração
.magento.app.yaml.code language-yaml relationships: database: "mysql:mysql" valkey: "valkey:valkey" valkey-session: "valkey-session:valkey" # Relationship of the new Valkey instance search: "search:elasticsearch" rabbitmq: "rabbitmq:rabbitmq" -
Solicite uma nova instância do Valkey dedicada às sessões nos ambientes de Produção e Preparo.
Envie um tíquete de Suporte da Adobe Commerce. Inclua os arquivos de configuração
.magento/services.yamle.magento.app.yamlatualizados.Essa atualização não causa tempo de inatividade, mas requer uma implantação para ativar o novo serviço.
-
Verifique se a nova instância está em execução e observe o número da porta.
code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp -
Adicione o número da porta ao arquivo de configuração
.magento.env.yaml.note important IMPORTANT Configure a porta da sessão Valkey apenas se ece-toolsnão puder detectá-la automaticamente a partir da definição do serviço de sessão ValkeyMAGENTO_CLOUD_RELATIONSHIPS.note note NOTE Defina disable_lockingcomo1para obter o melhor desempenho. Em casos raros em que as condições de corrida ocorrem devido à alta atividade de sessão simultânea, defina como0para habilitar o bloqueio.code language-yaml SESSION_CONFIGURATION: _merge: true redis: # keep 'redis' even if you are using Valkey. timeout: 5 disable_locking: 1 bot_first_lifetime: 60 bot_lifetime: 7200 max_lifetime: 2592000 min_lifetime: 60 -
Remover sessões do banco de dados padrão (
db 0) na instância de cache Valkey.code language-terminal valkey-cli -h 127.0.0.1 -p 6370 -n 0 FLUSHDB
Compactação de cache
Se você usar mais de 6 GB de Redis ou Valkey maxmemory, poderá habilitar a compactação de cache para reduzir o espaço consumido pelas chaves. Esteja ciente de que essa configuração troca o desempenho do lado do cliente por economia de memória. Se você tiver capacidade extra do CPU, considere ativá-la. Consulte Usar Redis para armazenamento de sessão ou Usar Valkey para armazenamento de sessão no Guia de Configuração.
stage:
deploy:
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
compress_data: 4 # 0-9
compress_tags: 4 # 0-9
compress_threshold: 20480 # don't compress files smaller than this value
compression_lib: 'gzip' # snappy and lzf for performance, gzip for high compression (~69%)
Habilitar liberação assíncrona
Para habilitar lazyfree no Adobe Commerce na infraestrutura em nuvem, envie um tíquete de Suporte Adobe Commerce solicitando que a seguinte configuração Redis ou Valkey seja aplicada aos seus ambientes:
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes
Quando lazyfree está habilitado, Redis ou Valkey descarrega a recuperação de memória em threads em segundo plano para remoções, expirações, exclusões iniciadas pelo servidor, exclusões de usuário e liberações de conjunto de dados de réplica. Isso reduz o bloqueio do thread principal e pode reduzir a latência da solicitação.
lazyfree-lazy-user-del yes faz com que o comando DEL se comporte como UNLINK, o que desvincula as chaves imediatamente e libera sua memória de forma assíncrona.Habilitar E/S multithread
Para habilitar a thread de E/S do Redis na Adobe Commerce na infraestrutura em nuvem, envie um tíquete de Suporte da Adobe Commerce solicitando a configuração da thread de E/S abaixo. Essa configuração pode melhorar o throughput descarregando leituras e gravações de soquete e análise de comandos do thread principal, ao custo de um maior uso do CPU. Valide o sob o carregamento e monitore seus hosts.
Redis:
| code language-text |
|---|
|
Para Valkey:
| code language-text |
|---|
|
io-threads ou desabilite leituras em threads de E/S.Aumentar tempos limite e tentativas do cliente
Aumente a tolerância do cliente de cache Redis ou Valkey para períodos curtos de saturação ajustando as opções de back-end em .magento.env.yaml.
stage:
deploy:
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
connect_retries: 3 # Number of connection retries
remote_backend_options:
read_timeout: 10 # Timeout
Essas configurações podem reduzir erros intermitentes de conexão e tempo limite de leitura durante picos curtos, repetindo a configuração da conexão e permitindo mais tempo para respostas do Redis ou Valkey.
Exemplos de configuração
Use os exemplos a seguir como ponto de partida para as configurações do serviço Redis ou Valkey.
Aplicar todas as recomendações de práticas recomendadas
| code language-yaml |
|---|
|
| code language-yaml |
|---|
|
Aplicar todas as recomendações de práticas recomendadas e separar o cache obsoleto por tipo de cache
| code language-yaml |
|---|
|
| code language-yaml |
|---|
|
Informações adicionais
Consulte os seguintes tópicos relacionados: