Práticas recomendadas para a configuração do serviço Redis
- Configuração do cache Redis L2
- Habilitar conexão Redis slave
- Chaves de pré-carregamento
- Habilitar cache obsoleto
- Separar o cache Redis da sessão Redis
- Compactar o cache Redis e usar
gzip
para maior compactação
Configuração do cache Redis L2
Configure o cache L2 do Redis definindo a variável de implantação REDIS_BACKEND
no arquivo de configuração .magento.env.yaml
.
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
Para obter a configuração do ambiente na infraestrutura em nuvem, consulte 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.
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
.Dimensionamento da memória cache L2 (Adobe Commerce Cloud)
O cache L2 usa um sistema de arquivos temporário como mecanismo de armazenamento. Comparado com sistemas de banco de dados de valores-chave especializados, um sistema de arquivos temporário não tem uma política de remoção de chaves para controlar o uso de memória.
A falta de controle do uso da memória pode fazer com que o uso da memória cache L2 cresça com o tempo, acumulando o cache obsoleto.
Para evitar o esgotamento da memória das implementações de cache L2, o Adobe Commerce limpa o armazenamento quando um determinado limite é atingido. O valor de limite padrão é 95%.
É importante ajustar o uso máximo da memória cache L2 com base nos requisitos do projeto para armazenamento em cache. Use um dos seguintes métodos para configurar o dimensionamento do cache de memória:
- Crie um tíquete de suporte para solicitar alterações de tamanho da montagem
/dev/shm
. - Ajuste a propriedade
cleanup_percentage
no nível do aplicativo para limitar a porcentagem máxima de preenchimento do armazenamento. A memória livre restante pode ser usada por 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.O código a seguir mostra um exemplo de configuração no arquivo .magento.env.yaml
:
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
cleanup_percentage: 90
Os requisitos de cache podem variar com base na configuração do projeto e no código personalizado de terceiros. O escopo de dimensionamento da memória cache L2 permite que o cache L2 funcione sem muitas ocorrências de limite.
Idealmente, o uso da memória cache L2 deve estabilizar em um determinado nível abaixo do limite, apenas 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 usando o seguinte comando da CLI e procurando a linha /dev/shm
.
O uso pode variar em diferentes nós, mas deve convergir para o mesmo valor.
df -h
Habilitar conexão Redis slave
Habilite uma conexão slave Redis no arquivo de configuração .magento.env.yaml
para permitir que apenas um nó manipule o tráfego de leitura-gravação, enquanto os outros nós manipulam o tráfego somente leitura.
stage:
deploy:
REDIS_USE_SLAVE_CONNECTION: true
Consulte REDIS_USE_SLAVE_CONNECTION no Guia do Commerce na Infraestrutura de 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.
Chaves de pré-carregamento
Para reutilizar dados entre páginas, liste as chaves para pré-carregamento no arquivo de configuração .magento.env.yaml
.
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
id_prefix: '061_' # Prefix for keys to be preloaded
backend_options:
preload_keys: # List the keys to be preloaded
- '061_EAV_ENTITY_TYPES:hash'
- '061_GLOBAL_PLUGIN_LIST:hash'
- '061_DB_IS_UP_TO_DATE:hash'
- '061_SYSTEM_DEFAULT:hash'
Para instalações locais, consulte o recurso de pré-carregamento Redis no Guia de Configuração.
Habilitar cache obsoleto
Reduza os tempos de espera de bloqueio e melhore o desempenho — especialmente ao lidar com vários blocos e chaves de cache — usando um cache desatualizado e gerando um novo cache em paralelo. Habilitar cache obsoleto e definir tipos de cache no arquivo de configuração config.php
(somente nuvem):
'cache' => [
'frontend' => [
'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' => '4',
'port' => '6370',
'password' => ''
],
'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']
],
]
full_page
não é relevante para o Adobe Commerce em projetos de infraestrutura em nuvem, pois eles usam Fastly.Para configurar instalações locais, consulte Opções de cache obsoletas no Guia de Configuração.
Instâncias separadas do cache Redis e da sessão
A separação do cache Redis da sessão Redis permite gerenciar o cache e as sessões independentemente. Isso evita que problemas de cache afetem as sessões, o que pode afetar a receita. Cada instância do Redis é executada em seu próprio núcleo, o que melhora o desempenho.
-
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"
-
Envie um tíquete de Suporte Adobe Commerce para solicitar o provisionamento de uma nova instância Redis dedicada às sessões nos ambientes de Produção e Preparo. Inclua os arquivos de configuração
.magento/services.yaml
e.magento.app.yaml
atualizados. Isso não causará 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 anote 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-tools
não puder detectá-la automaticamente na definição do serviço da sessão redisMAGENTO_CLOUD_RELATIONSHIPS
.note note NOTE disable_locking
deve ser definido como1
.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-bash redis-cli -h 127.0.0.1 -p 6374 -n 0 FLUSHDB
Durante a implantação, você deve ver as seguintes linhas no log de compilação e implantação:
W: - Downloading colinmollenhour/credis (1.11.1)
W: - Downloading colinmollenhour/php-redis-session-abstract (v1.4.5)
...
W: - Installing colinmollenhour/credis (1.11.1): Extracting archive
W: - Installing colinmollenhour/php-redis-session-abstract (v1.4.5): Extracting archive
...
[2022-08-17 01:13:40] INFO: Version of service 'redis' is 6.0
[2022-08-17 01:13:40] INFO: Version of service 'redis-session' is 6.0
[2022-08-17 01:13:40] INFO: redis-session will be used for session if it was not override by SESSION_CONFIGURATION
Compactação de cache
Se você estiver usando mais de 6 GB de Redis maxmemory
, poderá usar a compactação de cache para reduzir o espaço consumido pelas chaves. Esteja ciente de que há um compromisso com o desempenho do lado do cliente. Se você tiver CPUs sobressalentes, ative-as. Consulte Usar Redis para armazenamento de sessão no Guia de Configuração.
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
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 do Redis (lazyfree)
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 seja aplicada ao(s) seu(s) ambiente(s):
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes
Quando o lazyfree é ativado, o Redis descarrega a recuperação de memória para threads em segundo plano para remoções, expirações, exclusões iniciadas pelo servidor, exclusões de usuários e liberações do 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 de vários segmentos Redis
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 abaixo. Isso pode melhorar o throughput descarregando leituras/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.
io-threads-do-reads yes
io-threads 8 # choose a value lower than the number of CPU cores (check with nproc), then tune under load
io-threads
ou desabilite leituras em threads de E/S.Aumentar as tentativas e os tempos limite do cliente Redis
Aumente a tolerância do cliente de cache para saturação transitória ajustando as opções de back-end em .magento.env.yaml
:
stage:
deploy:
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
read_timeout: 10
connect_retries: 5
Essas configurações aumentam a tolerância do cliente para um breve congestionamento no Redis, estendendo a janela de espera de resposta e repetindo a configuração da conexão. Isso pode reduzir erros intermitentes de cannot connect to localhost:6370
e tempo limite de leitura durante picos curtos.