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, l’utilizzo della riga di comando è il metodo consigliato, in particolare per le configurazioni iniziali. La riga di comando fornisce la convalida, garantendo che la configurazione sia sintatticamente corretta.
Prerequisito:
Installare Redis prima di continuare.
Implementazioni della cache Redis
Adobe Commerce ha utilizzato le seguenti implementazioni di back-end della cache Redis:
- Back-end Redis legacy (
Cm_Cache_Backend_Redis) - Implementazione obsoleta utilizzata in configurazioni Redis precedenti. - Redis backend (
Magento\Framework\Cache\Backend\Redis) - Backend utilizzato dalla configurazione della riga di comando in questo argomento per la cache predefinita e delle pagine. - Back-end cache L2 (
Magento\Framework\Cache\Backend\RemoteSynchronizedCache) - Implementazione della cache a due livelli che utilizza Redis come back-end remoto e archiviazione della cache dei file locale per sincronizzare i dati della cache tra nodi. Vedi Configurazione della cache a due livelli.
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>...
I parametri comuni includono:
-
--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-compress-data0 per disabilitare la compressione.1cache-backend-redis-compression-libsnappy, lzf, l4z, zstd e gzip. Lascia vuoto per determinare automaticamente.cache-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>...
I parametri comuni includono:
-
--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.confpage-cache-redis-compress-data1 per comprimere la cache di pagina intera. Utilizza 0 per disabilitare la compressione.0page-cache-redis-compression-libsnappy, lzf, l4z, zstd e gzip. Lascia vuoto per determinare automaticamente.L’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):
'cache' => [
'frontend' => [
'default' => [
'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
'backend_options' => [
'server' => '127.0.0.1',
'database' => '0',
'port' => '6379'
],
],
'page_cache' => [
'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
'backend_options' => [
'server' => '127.0.0.1',
'port' => '6379',
'database' => '1',
'compress_data' => '0'
]
]
]
],
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
'cache' => [
'frontend' => [
'default' => [
'id_prefix' => '061_',
'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
'compression_lib' => '',
'preload_keys' => [
'061_EAV_ENTITY_TYPES',
'061_GLOBAL_PLUGIN_LIST',
'061_DB_IS_UP_TO_DATE',
'061_SYSTEM_DEFAULT',
],
]
],
'page_cache' => [
'id_prefix' => '061_'
]
]
]
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:
'cache' => [
'frontend' => [
'default' => [
'id_prefix' => 'b0b_',
'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
'compression_lib' => ''
]
],
'page_cache' => [
'id_prefix' => 'b0b_'
]
],
'allow_parallel_generation' => false
],
Ottimizzazione delle prestazioni
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
Estensione PHP Redis
Utilizzare l’estensione PHP Redis nativa (phpredis) quando supportata dall’ambiente:
Usa apt
Per Debian o Ubuntu, usa apt:
sudo apt-get install php-redis
sudo systemctl restart php-fpm
php -m | grep redis
Usa pecl
In alternativa, utilizzare pecl:
sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php/<version>/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 Redis 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.