Configurazione della cache L2 per l’ottimizzazione delle prestazioni
La memorizzazione nella cache L2 (a due livelli) riduce il traffico di rete tra lo storage della cache remota (Redis o Valkey) e l’applicazione Commerce aggiungendo un livello di cache locale su ciascun nodo web. Un’istanza Commerce standard trasferisce circa 300 KB per richiesta e in alcune situazioni il traffico può superare rapidamente le 1000 richieste.
Con il caching L2, ogni nodo web memorizza localmente i dati a cui si accede di frequente e utilizza la cache remota per due scopi:
- Verifica della versione dei dati della cache per verificare che la cache più recente sia memorizzata localmente
- Trasferimento dei dati della cache aggiornati dall’archivio remoto al computer locale
Commerce memorizza la versione con hash dei dati nella cache remota, aggiungendo il suffisso :hash alla chiave regolare. Quando la cache locale non è aggiornata, i dati vengono recuperati dal computer remoto tramite un adattatore cache.
Sono disponibili due implementazioni di cache L2:
Cm_Cache_Backend_File per l’archiviazione localeConfigurazione cache L2 legacy (RemoteSynchronizedCache)
Le istruzioni di configurazione della cache dipendono dal tipo di distribuzione:
-
Per Adobe Commerce su Cloud, configurare la cache L2 impostando la variabile di distribuzione
REDIS_BACKENDoVALKEY_BACKENDin.magento.env.yaml. Per esempi di configurazione, vedere Configurare la cache L2. -
Per le versioni locali di Adobe Commerce che supportano Redis, utilizzare l’esempio seguente per modificare o sostituire la sezione della cache esistente nel file
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'],
],
]
Dove:
-
backendè l’implementazione della cache L2. -
backend_optionsè la configurazione della cache L2.remote_backendè l’implementazione della cache remota: Redis o MySQL.remote_backend_optionsè la configurazione della cache remota.local_backendè l’implementazione della cache locale:Cm_Cache_Backend_Filelocal_backend_optionsè la configurazione della cache locale.cache_dirè un’opzione specifica della cache del file per la directory in cui è memorizzata la cache locale.
Per Adobe Commerce, Adobe consiglia di utilizzare Redis per il caching remoto (\Magento\Framework\Cache\Backend\Redis) e Cm_Cache_Backend_File per il caching locale dei dati nella memoria condivisa, utilizzando: 'local_backend_options' => ['cache_dir' => '/dev/shm/']
Adobe consiglia di utilizzare la funzionalità cache preload, in quanto riduce drasticamente la pressione su Redis. Non dimenticare di aggiungere il suffisso ‘:hash’ per le chiavi di precaricamento.
Opzioni cache non aggiornate
A partire da Commerce 2.4, l’opzione use_stale_cache può migliorare le prestazioni in casi specifici fornendo i dati precedentemente memorizzati nella cache mentre i nuovi dati della cache vengono generati in un processo parallelo.
In genere, il compromesso con l’attesa di blocco è accettabile dal punto di vista delle prestazioni. Tuttavia, con l’aumento del numero di blocchi o voci della cache, le attese dei blocchi richiedono più tempo. In alcuni scenari, l’attesa può essere pari a il numero di chiavi x timeout ricerca per il processo. In rari casi, un commerciante può avere centinaia di chiavi nella cache Block/Config, quindi anche un piccolo timeout di ricerca per un blocco può costare secondi.
'use_stale_cache' => true alla configurazione di livello superiore del front-end della cache L2.Adobe consiglia di abilitare l’opzione use_stale_cache solo per i tipi di cache che ne beneficiano maggiormente, tra cui:
block_htmlconfig_integration_apiconfig_integrationfull_pagelayoutreflectiontranslate
Adobe sconsiglia di abilitare l’opzione use_stale_cache per il tipo di cache default.
Il codice seguente mostra un esempio di configurazione:
'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']
],
],
Implementazione moderna della cache L2 di Symfony
Nelle versioni di Commerce 2.4.9+, utilizzare l’implementazione della cache L2 basata su Symfony Cache (symfony_l2 backend) invece della cache L2 legacy. La cache L2 di Symfony fornisce un’implementazione di caching moderna e conforme a PSR-6 con miglioramenti significativi delle prestazioni rispetto alla tradizionale RemoteSynchronizedCache.
ece-tools) gestisce automaticamente questa configurazione. Non modificare direttamente app/etc/env.php. La distribuzione sovrascrive le modifiche manuali. Per la configurazione cloud, vedi Configurare la cache L2 di Symfony.symfony_l2 è disponibile solo in Adobe Commerce 2.4.9 e versioni successive, configurarlo con Valkey come back-end remoto. Redis non è un back-end remoto ufficialmente supportato per symfony_l2. Consulta Requisiti di sistema per i servizi di cache supportati per versione.Vantaggi della cache L2 di Symfony
- Architettura moderna: basata sui componenti della cache di Symfony (conforme a PSR-6)
- Prestazioni migliori: supporto nativo per la serializzazione Igbinary, la compressione Gzip e gli script Lua
- Connessioni persistenti: riduce il sovraccarico della connessione Valkey con il connection pooling
- Chiavi di precaricamento: supporta il precaricamento della chiave della cache per i dati critici
- Supporto cache non aggiornata: piena compatibilità con l’opzione
use_stale_cache - Configurazione semplificata: nomi dei tipi di back-end di pulizia (
valkey,file)
Esempio di configurazione con cache L2 Symfony
Utilizza il tipo di back-end symfony_l2 semplificato per la cache L2:
'cache' => [
'frontend' => [
'default' => [
'backend' => 'symfony_l2',
'backend_options' => [
// L2 (Remote): Valkey with Symfony Cache
'remote_backend' => 'valkey',
'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 con cache non aggiornata
Configurare front-end separati per il supporto della cache non aggiornata:
'cache' => [
'frontend' => [
// Default frontend: NO stale cache
'default' => [
'backend' => 'symfony_l2',
'backend_options' => [
'remote_backend' => 'valkey',
'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' => 'valkey',
'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'],
],
],
Opzioni di back-end per la cache L2 di Symfony
remote_backend'valkey'valkey o file. Usa valkey per la cache L2.remote_backend_options[]local_backend'file'file o apculocal_backend_options[]cleanup_percentage95use_stale_cachefalseremote_backend accetta anche un valore di redis. Tuttavia, Redis non è un servizio di cache ufficialmente supportato per Adobe Commerce 2.4.9 e versioni successive. Adobe consiglia di configurare symfony_l2 solo con valkey. Consulta Requisiti di sistema per i servizi di cache supportati per versione.Prestazioni e affidabilità migliorate della cache L2 di Symfony
symfony_l2 e sono disponibili con la patch ACP2E-5132. Per le ultime note sulla versione della patch, consulta Patch cloud per Commerce.Memorizzazione tag cache L2 ottimizzata di Symfony
È stato ottimizzato il comportamento della cache L2 di Symfony per le distribuzioni con supporto Valkey, eliminando le scritture ridondanti dell’indice dei tag del file system. I tag cache sono ora memorizzati esclusivamente in Valkey, allineando il comportamento della cache di Symfony L2 con l’implementazione della cache legacy. In questo modo si riduce l’I/O del disco non necessario, si migliorano le prestazioni di scrittura della cache e si impedisce la crescita della directory var/cache/symfony/tags/.
Miglioramento del comportamento della cache basata su file
Per le distribuzioni che utilizzano la cache basata su file (senza Valkey), l’indice dei tag locali continua a essere mantenuto per supportare l’invalidamento della cache. L’indice dei tag viene ora scritto nel percorso cache_dir configurato anziché nel percorso var/cache codificato in precedenza, garantendo un utilizzo coerente della directory della cache e un supporto migliorato per le configurazioni della cache personalizzata.
Annullamento della validità della cache migliorato
L’annullamento della validità della cache ora utilizza blocchi di rigenerazione basati su TTL con la pulizia corretta dei tag L1, eliminando le voci della cache non aggiornate che in precedenza potevano persistere dopo l’annullamento della validità dei tag.
Compressione attivata per impostazione predefinita
La compressione Redis/Valkey (compress_data) è ora attivata per impostazione predefinita per la cache L2 di Symfony, riducendo il consumo di memoria e il traffico di rete e allineandola al comportamento predefinito dell’implementazione della cache legacy.
Impatto
- Elimina le scritture ridondanti dell’indice dei tag del file system per le distribuzioni della cache Symfony L2 con supporto Valkey.
- Riduce l’I/O del disco e migliora le prestazioni di scrittura della cache.
- Impedisce la crescita non necessaria della directory
var/cache/symfony/tags/. - Garantisce che le distribuzioni della cache basate su file utilizzino in modo coerente
cache_dirconfigurato, mantenendo al contempo il comportamento di invalidamento della cache. - Elimina le voci di cache non aggiornate tramite blocchi di rigenerazione basati su TTL e la pulizia corretta dei tag L1.
- Riduce il consumo di memoria e il traffico di rete con
compress_dataabilitato per impostazione predefinita.
Per opzioni di configurazione dettagliate, vedi: