Best practice per la configurazione del servizio Redis
- Configura cache L2 Redis
- Abilita connessione slave Redis
- Precarica chiavi
- Abilita cache non aggiornata
- Separare la cache Redis dalla sessione Redis
- Comprimi la cache Redis e utilizza
gzip
per una compressione più elevata
Configura cache L2 Redis
Configurare la cache di Redis L2 impostando la variabile di distribuzione REDIS_BACKEND
nel file di configurazione .magento.env.yaml
.
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
Per la configurazione dell'ambiente nell'infrastruttura cloud, vedere REDIS_BACKEND
nella Guida all'infrastruttura cloud di Commerce.
Per le installazioni locali, vedere Configure Redis page caching nella Guida alla configurazione.
ece-tools
. In caso contrario, aggiorna alla versione più recente. È possibile controllare la versione installata nell'ambiente locale utilizzando il comando CLI composer show magento/ece-tools
.Dimensioni della memoria cache L2 (Adobe Commerce Cloud)
La cache L2 utilizza un file system temporaneo come meccanismo di archiviazione. Rispetto ai sistemi di database specializzati con valori chiave, un file system temporaneo non dispone di criteri di rimozione delle chiavi per controllare l'utilizzo della memoria.
La mancanza di controllo dell'utilizzo della memoria può causare un aumento nel tempo dell'utilizzo della memoria cache L2 accumulando la cache non aggiornata.
Per evitare l’esaurimento della memoria per le implementazioni della cache L2, Adobe Commerce cancella l’archiviazione quando viene raggiunta una determinata soglia. Il valore di soglia predefinito è 95%.
È importante regolare l’utilizzo massimo della memoria cache L2 in base ai requisiti del progetto per lo storage della cache. Utilizzare uno dei metodi seguenti per configurare il dimensionamento della cache di memoria:
- Creare un ticket di supporto per richiedere modifiche alle dimensioni del mount
/dev/shm
. - Regolare la proprietà
cleanup_percentage
a livello di applicazione per limitare la percentuale di riempimento massima dell'archiviazione. La memoria disponibile rimanente può essere utilizzata da altri servizi.
È possibile modificare la configurazione nella configurazione di distribuzione nel gruppo di configurazione della cachecache/frontend/default/backend_options/cleanup_percentage
.
cleanup_percentage
è stata introdotta in Adobe Commerce 2.4.4.Il codice seguente mostra un esempio di configurazione nel file .magento.env.yaml
:
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
cleanup_percentage: 90
I requisiti della cache possono variare in base alla configurazione del progetto e al codice personalizzato di terze parti. L'ambito del dimensionamento della memoria cache L2 consente alla cache L2 di funzionare senza troppi hit di soglia.
Idealmente, l'utilizzo della memoria cache L2 dovrebbe stabilizzarsi a un certo livello al di sotto della soglia, proprio per evitare frequenti cancellazioni di memoria.
È possibile verificare l'utilizzo della memoria di archiviazione nella cache L2 in ogni nodo del cluster utilizzando il seguente comando CLI e cercando la riga /dev/shm
.
L’utilizzo può variare tra nodi diversi, ma deve convergere allo stesso valore.
df -h
Abilita connessione slave Redis
Abilitare una connessione slave Redis nel file di configurazione .magento.env.yaml
per consentire a un solo nodo di gestire il traffico di lettura/scrittura mentre gli altri nodi gestiscono il traffico di sola lettura.
stage:
deploy:
REDIS_USE_SLAVE_CONNECTION: true
Vedi REDIS_USE_SLAVE_CONNECTION nella Guida di Commerce sull'infrastruttura cloud.
Per le installazioni Adobe Commerce locali, configurare la nuova implementazione della cache Redis utilizzando i comandi bin/magento:setup
. Vedere Utilizzare Redis per la cache predefinita nella Guida alla configurazione.
Precarica chiavi
Per riutilizzare i dati tra pagine, elencare le chiavi per il precaricamento nel file di configurazione .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'
Per le installazioni locali, vedere Funzionalità di precaricamento Redis nella Guida alla configurazione.
Abilita cache non aggiornata
Riduci i tempi di attesa di blocco e migliora le prestazioni, soprattutto quando si tratta di numerosi blocchi e chiavi di cache, utilizzando una cache obsoleta durante la generazione in parallelo di una nuova cache. Abilitare la cache non aggiornata e definire i tipi di cache nel file di configurazione config.php
(solo cloud):
'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
non è rilevante per i progetti di infrastruttura cloud di Adobe Commerce, perché utilizza Fastly.Per la configurazione delle installazioni locali, vedere Opzioni cache non aggiornate nella Guida alla configurazione.
Cache Redis e istanze di sessione separate
La separazione della cache Redis dalla sessione Redis consente di gestire la cache e le sessioni in modo indipendente. Evita che i problemi di cache influiscano sulle sessioni, il che potrebbe influire sui ricavi. Ogni istanza Redis viene eseguita sul proprio core, migliorando le prestazioni.
-
Aggiornare il file di configurazione
.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
-
Aggiornare il file di configurazione
.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"
-
Invia un ticket di supporto Adobe Commerce per richiedere il provisioning di una nuova istanza Redis dedicata alle sessioni negli ambienti di produzione e staging. Includere i file di configurazione
.magento/services.yaml
e.magento.app.yaml
aggiornati. Questo non causerà tempi di inattività, ma richiede una distribuzione per attivare il nuovo servizio. -
Verifica che la nuova istanza sia in esecuzione e annota il numero di porta.
code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
-
Aggiungere il numero di porta al file di configurazione
.magento.env.yaml
.note important IMPORTANT Configurare la porta di sessione Redis solo se ece-tools
non è in grado di rilevarla automaticamente dalla definizione del servizio di sessione RedisMAGENTO_CLOUD_RELATIONSHIPS
.note note NOTE disable_locking
deve essere impostato su1
.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
-
Rimuovere le sessioni dal database predefinito (
db 0
) nell'istanza della cache Redis.code language-bash redis-cli -h 127.0.0.1 -p 6374 -n 0 FLUSHDB
Durante la distribuzione, nel registro build e distribuzione dovrebbero essere visualizzate le righe seguenti:
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
Compressione cache
Se si utilizzano più di 6 GB di Redis maxmemory
, è possibile utilizzare la compressione della cache per ridurre lo spazio utilizzato dalle chiavi. Tieni presente che esiste un compromesso con le prestazioni lato client. Se si dispone di CPU di riserva, attivarle. Vedere Utilizzare Redis per l'archiviazione della sessione nella Guida alla configurazione.
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%)
Abilita liberazione asincrona Redis (lazyfree)
Per abilitare lazyfree
su Adobe Commerce nell'infrastruttura cloud, invia un ticket di supporto Adobe Commerce richiedendo che la seguente configurazione Redis venga applicata agli ambienti:
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes
Quando lazyfree è abilitato, Redis scarica il recupero della memoria in thread in background per eliminazioni, scadenze, eliminazioni avviate dal server, eliminazioni da parte dell'utente e scaricamenti del set di dati di replica. Questo riduce il blocco del thread principale e può ridurre la latenza della richiesta.
lazyfree-lazy-user-del yes
il comando DEL
si comporta come UNLINK
, che scollega immediatamente le chiavi e libera la memoria in modo asincrono.Abilita I/O multithreading Redis
Per abilitare il threading di I/O Redis su Adobe Commerce nell'infrastruttura cloud, invia un ticket di supporto Adobe Commerce richiedendo la configurazione seguente. Questo può migliorare la velocità di trasferimento scaricando le operazioni di lettura/scrittura del socket e l'analisi dei comandi dal thread principale, a scapito di un maggiore utilizzo di CPU. Convalida sotto carico e monitora gli host.
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
o disabilitare le letture nei thread di I/O.Aumentare i timeout e i tentativi del client Redis
Aumentare la tolleranza del client cache a una saturazione transitoria regolando le opzioni di back-end in .magento.env.yaml
:
stage:
deploy:
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
read_timeout: 10
connect_retries: 5
Queste impostazioni aumentano la tolleranza del client alla breve congestione su Redis estendendo la finestra di attesa della risposta e ritentando la configurazione della connessione. Ciò può ridurre gli errori di cannot connect to localhost:6370
intermittenti e di timeout di lettura durante picchi brevi.