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.
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: