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)
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.
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
[2.4.9-beta]{class="badge negative" title="Disponibile solo in versione 2.4.9-beta."}
A partire da Commerce 2.4.9, è possibile utilizzare l’implementazione della cache L2 basata su Symfony Cache (symfony_l2 backend) che fornisce un’implementazione di caching moderna e conforme a PSR-6 con miglioramenti significativi delle prestazioni rispetto alla tradizionale RemoteSynchronizedCache.
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 Redis o 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 (
redis,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): Redis with Symfony Cache
'remote_backend' => 'redis',
'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' => 'redis',
'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' => 'redis',
'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'redis'redis, valkey o fileremote_backend_options[]local_backend'file'file o apculocal_backend_options[]cleanup_percentage90use_stale_cachefalseSupporto Valkey
Il backend symfony_l2 supporta anche Valkey come backend remoto:
'backend_options' => [
'remote_backend' => 'valkey', // Use Valkey instead of Redis
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
],
// ... rest of configuration
]
Per opzioni di configurazione dettagliate, vedi: