Configurare Redis per cache predefinita e di pagina
Commerce fornisce opzioni della riga di comando per configurare la pagina Redis e il caching predefinito. Sebbene sia possibile configurare il caching modificando il file <Commerce-install-dir>app/etc/env.php, la riga di comando è il metodo consigliato, in particolare per le configurazioni iniziali. La riga di comando fornisce la convalida per garantire che la configurazione sia sintatticamente corretta.
Prerequisito:
Installare Redis prima di continuare.
Framework supportati
-
Cache Zend (2.4.8 e versioni precedenti) — Backend Redis legacy per Commerce 2.4.8 e versioni precedenti:
- Back-end Redis legacy - Utilizza il percorso completo della classe (
Magento\Framework\Cache\Backend\Redis) - Chiavi di precaricamento - Supporta il precaricamento delle chiavi della cache utilizzate di frequente
- Script Lua — Lua per la raccolta di oggetti inattivi
- Compressione - Supporta la compressione dei dati
- Back-end Redis legacy - Utilizza il percorso completo della classe (
-
Cache Symfony (2.4.9+) — A partire da Commerce 2.4.9, la cache Symfony fornisce un’implementazione di memorizzazione nella cache moderna e conforme a PSR-6 per Redis con miglioramenti significativi delle prestazioni:
- Pipeline Redis automatica: consente di eseguire più operazioni in batch in singole richieste, riducendo la latenza
- TagAwareAdapter PSR-6: invalidazione efficiente della cache basata su tag con operazioni atomiche
- Serializzazione ignorata: la serializzazione binaria riduce la dimensione della voce della cache del 45% e migliora la velocità del 5-10%
- Connessioni permanenti migliorate — Pool di connessioni più stabili con una migliore gestione dei processi fork
- Script Lua ottimizzati — Esecuzione lato server combinata con pipeline per la massima efficienza
Configurare il caching predefinito di Redis
Eseguire il comando setup:config:set e specificare parametri specifici per il caching predefinito Redis.
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-<parameter>=<value>...
Con i seguenti parametri:
-
--cache-backend=redisabilita il caching predefinito di Redis. Se questa funzione è già stata abilitata, ometti questo parametro. -
--cache-backend-redis-<parameter>=<value>è un elenco di coppie chiave-valore che configurano il caching predefinito:
cache-backend-redis-server127.0.0.1cache-backend-redis-port6379cache-backend-redis-dbImportante: se si utilizza Redis per più di un tipo di memorizzazione nella cache, i numeri di database devono essere diversi. È consigliabile assegnare il numero predefinito del database di memorizzazione nella cache a 0, il numero del database di memorizzazione nella cache delle pagine a 1 e il numero del database di memorizzazione nella sessione a 2.
0cache-backend-redis-passwordauth, che richiede l’autenticazione dei client per accedere al database. La password è configurata direttamente nel file di configurazione di Redis: /etc/redis/redis.confcache-backend-redis-use-luaImpostazione predefinita: mantieni alle
0. La modalità Lua è disabilitata per impostazione predefinita per evitare regressioni delle prestazioni note e problemi di perdita della cache di GraphQL introdotti dalla libreria Redis in bundle (1.17.x) quando Lua è stato abilitato.0cache-backend-redis-use-lua-on-gcbackend_clean_cache).Impostazione predefinita: mantieni alle
1. Abilitato intenzionalmente per garantire la pulizia del set di tag atomici durante la GC. Senza di esso, può verificarsi una situazione di tipo “race condition” quando il cron backend_clean_cache viene eseguito contemporaneamente a un’operazione di salvataggio della cache, lasciando le voci della cache senza un record corrispondente nell’indice dei tag della cache. Questo causa un errore improvviso di invalidazione basata su tag: ad esempio, l’aggiornamento del prezzo di un prodotto potrebbe non invalidare la cache del prodotto, richiedendo invece uno scaricamento completo della cache.1Modalità Lua
Se abilitata, la modalità Lua raggruppa più operazioni Redis (scritture cache, aggiornamenti dei tag, Garbage Collection) in un unico script atomico eseguito lato server tramite EVALSHA. Questo impedisce l’interfoliazione da richieste simultanee, ad esempio, garantendo che una voce della cache e la relativa appartenenza ai tag siano scritte insieme.
use_lua e use_lua_on_gc senza comprendere le implicazioni per la versione di Adobe Commerce:use_lua: l'abilitazione di questa proprietà in Adobe Commerce 2.4.7 o 2.4.8 (libreriacolinmollenhour/cache-backend-redis1.17.1) può causare il danneggiamento della cache e problemi di mancato funzionamento della cache di GraphQL.use_lua_on_gc: la disabilitazione di questa proprietà in Adobe Commerce 2.4.8 rimuove la protezione atomica durante la raccolta di oggetti inattivi e può causare un errore silenzioso di invalidazione della cache basata su tag, che richiede il ripristino di uno scaricamento completo della cache.
Esempio di comando (cache predefinita)
Nell’esempio seguente viene attivato il caching predefinito Redis, l’host viene impostato su 127.0.0.1 e il numero del database viene assegnato a 0. Redis utilizza i valori predefiniti per tutti gli altri parametri.
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=127.0.0.1 --cache-backend-redis-db=0
Configurare il caching delle pagine Redis
Per configurare il caching delle pagine Redis in Commerce, eseguire il comando setup:config:set con parametri aggiuntivi.
bin/magento setup:config:set --page-cache=redis --page-cache-redis-<parameter>=<value>...
Con i seguenti parametri:
-
--page-cache=redisabilita il caching delle pagine Redis. Se questa funzione è già stata abilitata, ometti questo parametro. -
--page-cache-redis-<parameter>=<value>è un elenco di coppie chiave-valore che configurano il caching delle pagine:
page-cache-redis-server127.0.0.1page-cache-redis-port6379page-cache-redis-dbImportante: se si utilizza Redis per più di un tipo di memorizzazione nella cache, i numeri di database devono essere diversi. È consigliabile assegnare il numero predefinito del database di memorizzazione nella cache a 0, il numero del database di memorizzazione nella cache delle pagine a 1 e il numero del database di memorizzazione nella sessione a 2.
0page-cache-redis-passwordauth, che richiede l’autenticazione dei client per accedere al database. Configurare la password nel file di configurazione Redis: /etc/redis/redis.confL’esempio che segue abilita il caching delle pagine Redis, imposta l’host su 127.0.0.1 e assegna il numero di database a 1. Tutti gli altri parametri vengono impostati sul valore predefinito.
bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=127.0.0.1 --page-cache-redis-db=1
Verifica la configurazione dell’ambiente Commerce
L’esecuzione dei comandi per configurare Redis caching aggiorna la configurazione dell’ambiente Commerce (<Commerce-install-dir>app/etc/env.php):
| code language-php |
|---|
|
| code language-php |
|---|
|
| note |
|---|
| NOTE |
A partire da Commerce 2.4.9, utilizza il tipo di back-end semplificato 'backend' => 'redis' invece del percorso completo della classe. La cache di Symfony viene utilizzata automaticamente quando si specifica il nome semplificato. |
Configurare opzioni di caching aggiuntive
Funzione di precaricamento Redis
Poiché Commerce memorizza i dati di configurazione nella cache Redis, puoi precaricare i dati riutilizzati tra le pagine. Per trovare le chiavi che devono essere precaricate, analizza i dati trasferiti da Redis a Commerce. Adobe consiglia di precaricare i dati caricati su ogni pagina, ad esempio SYSTEM_DEFAULT, EAV_ENTITY_TYPES e DB_IS_UP_TO_DATE.
Redis utilizza pipeline per comporre le richieste di caricamento. Le chiavi devono includere il prefisso del database; ad esempio, se il prefisso del database è 061_, la chiave di precaricamento sarà simile alla seguente: 061_SYSTEM_DEFAULT
| code language-php |
|---|
|
| code language-php |
|---|
|
Quando si utilizza la funzione di precaricamento con una cache L2, è necessario aggiungere il suffisso :hash alle chiavi. La cache L2 trasferisce solo l’hash dei dati, non i dati effettivi.
'preload_keys' => [
'061_EAV_ENTITY_TYPES:hash',
'061_GLOBAL_PLUGIN_LIST:hash',
'061_DB_IS_UP_TO_DATE:hash',
'061_SYSTEM_DEFAULT:hash',
],
Generazione parallela
A partire dalla versione di Commerce 2.4.0, Adobe ha introdotto l’opzione allow_parallel_generation per gli utenti che desiderano eliminare l’attesa dei blocchi. È disabilitato per impostazione predefinita e Adobe consiglia di disabilitarlo fino a quando non si dispone di configurazioni e/o blocchi eccessivi.
Per abilitare la generazione parallela:
bin/magento setup:config:set --allow-parallel-generation
Poiché è un flag, non è possibile disattivarlo con un comando. Impostare manualmente il valore di configurazione su false:
| code language-php |
|---|
|
| code language-php |
|---|
|
Ottimizzazione delle prestazioni della cache di Symfony
Se si utilizza Symfony Cache, è possibile ottimizzare ulteriormente le prestazioni configurando il serializzatore Igbinary, installando l’estensione PHP e phpredis e abilitando connessioni persistenti.
Serializzatore igbinario
Il serializzatore Igbinary migliora notevolmente le prestazioni rispetto alla serializzazione predefinita di PHP. Deve essere configurato manualmente in app/etc/env.php:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary serialization
]
],
'page_cache' => [
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary for page cache too
]
]
]
]
Installare l’estensione PHP Igbinary
Per utilizzare la serializzazione binaria, è necessario installare l’estensione PHP Igbinary.
Utilizzo di apt (consigliato per Debian/Ubuntu):
sudo apt-get install php-igbinary
sudo systemctl restart php-fpm
php -m | grep igbinary
Utilizzo di pecl (metodo alternativo):
sudo pecl install igbinary
echo "extension=igbinary.so" | sudo tee /etc/php/8.3/mods-available/igbinary.ini
sudo phpenmod igbinary
sudo systemctl restart php-fpm
php -m | grep igbinary
Estensioni PHP Redis: phpredis vs predis
Commerce 2.4.9+ include il fallback automatico tra phpredis (estensione C nativa) e Predis (libreria PHP pura). Per ottenere prestazioni ottimali, installare phpredis:
Utilizzo di apt (consigliato per Debian/Ubuntu):
sudo apt-get install php-redis
sudo systemctl restart php-fpm
php -m | grep redis
Utilizzo di pecl (metodo alternativo):
sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php/8.3/mods-available/redis.ini
sudo phpenmod redis
sudo systemctl restart php-fpm
php -m | grep redis
Confronto delle prestazioni:
Connessioni persistenti
Le connessioni persistenti riutilizzano le connessioni Redis esistenti tra le richieste, fornendo operazioni della cache più veloci del 5-15%. Configura in app/etc/env.php:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
]
],
'page_cache' => [
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
]
]
persistent_id univoco per ogni tipo di cache per evitare conflitti di connessione.Configurazione ottimizzata completa
Ecco una configurazione di Symfony pronta per la produzione che combina tutte le ottimizzazioni delle prestazioni:
'cache' => [
'frontend' => [
'default' => [
'id_prefix' => 'b0b_',
'backend' => 'redis',
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compress_data' => '1',
'compression_lib' => 'gzip',
'persistent' => '1',
'persistent_id' => 'cache_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
'use_lua' => '1',
'use_lua_on_gc' => '1',
'preload_keys' => [
'b0b_EAV_ENTITY_TYPES',
'b0b_GLOBAL_PLUGIN_LIST',
'b0b_DB_IS_UP_TO_DATE',
'b0b_SYSTEM_DEFAULT',
],
]
],
'page_cache' => [
'id_prefix' => 'b0b_',
'backend' => 'redis',
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary',
'compress_data' => '0',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
],
'allow_parallel_generation' => false
]
Verificare la connessione Redis
Per verificare che Redis e Commerce funzionino correttamente:
- Accedere al server che esegue Redis e Commerce.
- Apri un terminale.
- Controllare la connessione utilizzando il comando
redis-cli monitoro il comandoredis-cli ping.
Se i comandi vengono eseguiti correttamente, Redis è in esecuzione e può comunicare con l’applicazione Commerce. In caso di esito negativo, è necessario risolvere un problema di connessione tra Redis e Commerce.
Comando Redis Monitor
redis-cli monitor
Output di esempio per il caching delle pagine:
1476826133.810090 [0 127.0.0.1:52366] "select" "1"
1476826133.816293 [0 127.0.0.1:52367] "select" "0"
1476826133.817461 [0 127.0.0.1:52367] "hget" "zc:k:ea6_GLOBAL__DICONFIG" "d"
1476826133.829666 [0 127.0.0.1:52367] "hget" "zc:k:ea6_DICONFIG049005964B465901F774DB9751971818" "d"
1476826133.837854 [0 127.0.0.1:52367] "hget" "zc:k:ea6_INTERCEPTION" "d"
1476826133.868374 [0 127.0.0.1:52368] "select" "1"
1476826133.869011 [0 127.0.0.1:52369] "select" "0"
1476826133.869601 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_DEFAULT__10__235__32__1080MAGENTO2" "d"
1476826133.872317 [0 127.0.0.1:52369] "hget" "zc:k:ea6_INITIAL_CONFIG" "d"
1476826133.879267 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL_PRIMARY_PLUGIN_LIST" "d"
...
Se entrambi i comandi vengono eseguiti, Redis viene configurato correttamente.
Controllare i dati compressi
Per verificare i dati di sessione compressi e la cache delle pagine, utilizzare lo strumento RESP.app. Supporta la decompressione automatica dei dati della cache di pagina e della sessione di Commerce 2 e visualizza i dati della sessione PHP in un formato leggibile.