Configuration de Valkey pour le cache de page et par défaut
Commerce fournit des options de ligne de commande pour configurer la valeur par défaut de Valkey et la mise en cache des pages. Bien que vous puissiez configurer la mise en cache en modifiant le fichier <Commerce-install-dir>app/etc/env.php, il est recommandé d’utiliser la ligne de commande, en particulier pour les configurations initiales. La ligne de commande permet de valider en s’assurant que la configuration est correcte sur le plan syntaxique.
Prérequis :
Installez Valkey avant de continuer.
Structures prises en charge
-
Zend Cache (2.4.8 et versions antérieures) — Serveur principal Valkey hérité pour Commerce 2.4.8 et versions antérieures :
- Serveur principal Valkey hérité — Utilise le chemin de classe complet (
Magento\Framework\Cache\Backend\Valkey) - Précharger les clés — Prend en charge le préchargement des clés de cache fréquemment utilisées
- Scripts Lua — Lua pour la récupération de l'espace mémoire
- Compression — Prend en charge la compression des données
- Serveur principal Valkey hérité — Utilise le chemin de classe complet (
-
Symfony Cache (2.4.9+) — À partir de Commerce 2.4.9, Symfony Cache fournit une mise en cache moderne, conforme à la norme PSR-6, pour Valkey, avec des améliorations de performances significatives :
- Pipeline Valkey automatique — Regroupe plusieurs opérations en une seule demande, ce qui réduit la latence
- PSR-6 TagAwareAdapter — Invalidation efficace du cache basé sur les balises avec des opérations atomiques
- Sérialisation igbinary — La sérialisation binaire réduit la taille de l'entrée du cache de 45 % et améliore la vitesse de 5 à 10 %
- Connexions persistantes améliorées — Pool de connexions plus stable avec une meilleure gestion des processus dupliqués
- Scripts Lua optimisés : exécution côté serveur combinée à la création de pipelines pour une efficacité maximale
Configurer la mise en cache par défaut de Valkey
Exécutez la commande setup:config:set et spécifiez les paramètres de mise en cache par défaut de Valkey.
bin/magento setup:config:set --cache-backend=valkey --cache-backend-valkey-<parameter>=<value>...
-
--cache-backend=valkeyactive la mise en cache par défaut de Valkey. Si cette fonctionnalité a déjà été activée, omettez ce paramètre. -
--cache-backend-valkey-<parameter>=<value>une liste de paires clé-valeur qui configurent la mise en cache par défaut :
cache-backend-valkey-server127.0.0.1 indique que Valkey est installé sur le serveur Commerce.127.0.0.1cache-backend-valkey-port6379cache-backend-valkey-db0 par défaut.Important : si vous utilisez Valkey pour plusieurs types de mise en cache, les numéros de base de données doivent être différents. Adobe recommande d’attribuer le numéro de base de données de mise en cache par défaut à
0, le numéro de base de données de mise en cache de page à 1 et le numéro de base de données de stockage de session à 2.0cache-backend-valkey-passwordauth, qui nécessite que les clients s’authentifient pour accéder à la base de données. Le mot de passe est configuré directement dans le fichier de configuration de Valkey : /etc/valkey/valkey.confcache-backend-valkey-use-luaLUA : Lua nous permet d’exécuter une partie de la logique d’application dans Valkey, ce qui améliore les performances et garantit la cohérence des données grâce à son exécution atomique.
0cache-backend-valkey-use-lua-on-gcLUA : Lua nous permet d’exécuter une partie de la logique d’application dans Valkey, ce qui améliore les performances et garantit la cohérence des données grâce à son exécution atomique.
1Exemple de commande (cache par défaut)
L'exemple suivant active la mise en cache par défaut de Valkey, définit l'hôte sur 127.0.0.1 et affecte le numéro de base de données à 0. Valkey utilise les valeurs par défaut pour tous les autres paramètres.
bin/magento setup:config:set --cache-backend=valkey --cache-backend-valkey-server=127.0.0.1 --cache-backend-valkey-db=0
Configuration de la mise en cache des pages Clé
Pour configurer la mise en cache des pages Valkey sur Commerce, exécutez la commande setup:config:set avec des paramètres supplémentaires.
bin/magento setup:config:set --page-cache=valkey --page-cache-valkey-<parameter>=<value>...
Avec les paramètres suivants :
-
--page-cache=valkeyactive la mise en cache de page Valkey. Si cette fonctionnalité a déjà été activée, omettez ce paramètre. -
--page-cache-valkey-<parameter>=<value>une liste de paires clé-valeur qui configurent la mise en cache de page :
page-cache-valkey-server127.0.0.1 indique que Valkey est installé sur le serveur Commerce.127.0.0.1page-cache-valkey-port6379page-cache-valkey-db0 par défaut.Important : si vous utilisez Valkey pour plusieurs types de mise en cache, les numéros de base de données doivent être différents. Il est recommandé d’attribuer le numéro de base de données de mise en cache par défaut à
0, le numéro de base de données de mise en cache de page à 1 et le numéro de base de données de stockage de session à 2.0page-cache-valkey-passwordauth, qui nécessite que les clients s’authentifient pour accéder à la base de données. Configurez le mot de passe dans le fichier de configuration Valkey : /etc/valkey/valkey.confExemple de commande (cache de page)
L'exemple suivant active la mise en cache de page Valkey, définit l'hôte sur 127.0.0.1 et affecte le numéro de base de données à 1. Tous les autres paramètres sont définis sur la valeur par défaut.
bin/magento setup:config:set --page-cache=valkey --page-cache-valkey-server=127.0.0.1 --page-cache-valkey-db=1
Vérification de la configuration de l’environnement Commerce
L’exécution des commandes pour configurer la mise en cache de Valkey met à jour la configuration de l’environnement Commerce (<Commerce-install-dir>app/etc/env.php) :
| code language-php |
|---|
|
| code language-php |
|---|
|
| note note |
|---|
| NOTE |
À partir de la version 2.4.9 de Commerce, utilisez le type de serveur principal simplifié 'backend' => 'valkey' au lieu du chemin d’accès de classe complet. Symfony Cache est automatiquement utilisé lorsque le nom simplifié est spécifié. |
Configurer des options de mise en cache supplémentaires
Fonction de préchargement Valkey
Comme Commerce stocke les données de configuration dans le cache Valkey, vous pouvez précharger les données réutilisées entre les pages. Pour rechercher les clés qui doivent être préchargées, analysez les données transférées de Valkey vers Commerce. Adobe suggère de précharger les données chargées sur chaque page, telles que SYSTEM_DEFAULT, EAV_ENTITY_TYPES et DB_IS_UP_TO_DATE.
Valkey utilise le pipeline pour les requêtes de chargement composites. Les clés doivent inclure le préfixe de la base de données. Par exemple, si le préfixe de la base de données est 061_, la clé de préchargement ressemble à ceci : 061_SYSTEM_DEFAULT
| code language-php |
|---|
|
| code language-php |
|---|
|
Lors de l’utilisation de la fonction de préchargement avec un cache L2, vous devez ajouter le suffixe :hash à vos clés. Le cache L2 transfère uniquement le hachage des données, et non les données réelles.
'preload_keys' => [
'061_EAV_ENTITY_TYPES:hash',
'061_GLOBAL_PLUGIN_LIST:hash',
'061_DB_IS_UP_TO_DATE:hash',
'061_SYSTEM_DEFAULT:hash',
],
Génération parallèle
À partir de la version 2.4.0 de Commerce, Adobe a introduit l’option allow_parallel_generation pour les utilisateurs qui souhaitent éliminer l’attente de verrous. Il est désactivé par défaut et Adobe recommande de le désactiver jusqu’à ce que vous disposiez de configurations et/ou de blocs excessifs.
Pour activer la génération parallèle :
bin/magento setup:config:set --allow-parallel-generation
Comme il s’agit d’un indicateur , vous ne pouvez pas le désactiver avec une commande. Définissez manuellement la valeur de configuration sur false :
| code language-php |
|---|
|
| code language-php |
|---|
|
Optimisation des performances du cache de synonymes
Si vous utilisez Symfony Cache, vous pouvez optimiser davantage les performances en configurant le sérialiseur Igbinary, en installant l'extension PHP igbinary et l'extension phpredis, et en activant les connexions persistantes.
Sérialiseur Igbinaire
Le sérialiseur Igbinary offre des améliorations de performances significatives par rapport à la sérialisation par défaut de PHP. Il doit être configuré manuellement dans app/etc/env.php :
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'valkey',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary serialization
]
],
'page_cache' => [
'backend_options' => [
'server' => 'valkey',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary for page cache too
]
]
]
]
Installer l'extension PHP Igbinary
Pour utiliser la sérialisation igbinary, vous devez installer l'extension PHP Igbinary.
Utilisation d’apt (recommandé pour Debian/Ubuntu) :
sudo apt-get install php-igbinary
sudo systemctl restart php-fpm
php -m | grep igbinary
Utilisation de pecl (méthode alternative) :
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
Extensions PHP Redis : phpredis vs Predis
Commerce 2.4.9+ inclut une version de secours automatique entre phpredis (extension native C) et Predis (bibliothèque PHP pure). Pour des performances optimales, installez phpredis :
Utilisation d’apt (recommandé pour Debian/Ubuntu) :
sudo apt-get install php-redis
sudo systemctl restart php-fpm
php -m | grep redis
Utilisation de pecl (méthode alternative) :
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
Comparaison des performances :
Connexions persistantes
Les connexions persistantes réutilisent les connexions Valkey existantes entre les requêtes, ce qui accélère les opérations de mise en cache de 5 à 15 %. Configurez dans app/etc/env.php :
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'valkey',
'database' => '0',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
]
],
'page_cache' => [
'backend_options' => [
'server' => 'valkey',
'database' => '1',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
]
]
persistent_id unique pour chaque type de cache afin d’éviter les conflits de connexion.Configuration optimisée complète
Voici une configuration prête pour la production combinant toutes les optimisations de performances :
'cache' => [
'frontend' => [
'default' => [
'id_prefix' => 'b0b_',
'backend' => 'valkey',
'backend_options' => [
'server' => 'valkey',
'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' => 'valkey',
'backend_options' => [
'server' => 'valkey',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary',
'compress_data' => '0',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
],
'allow_parallel_generation' => false
]
Vérifier la connexion Valkey
Pour vérifier que Valkey et Commerce fonctionnent correctement ensemble :
- Connectez-vous au serveur qui exécute Valkey et Commerce.
- Ouvrez un terminal.
- Vérifiez la connexion à l’aide de la commande
valkey-cli monitorou de la commandevalkey-cli ping.
Si les commandes réussissent, alors Valkey est en cours d’exécution et peut communiquer avec l’application Commerce. En cas d’échec, il existe un problème de connexion entre Valkey et Commerce que vous devez résoudre.
Commande de moniteur Valkey
valkey-cli monitor
Exemple de sortie de mise en cache de page :
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"
1476826133.883312 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL__EVENT_CONFIG_CACHE" "d"
1476826133.898431 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DB_PDO_MYSQL_DDL_STAGING_UPDATE_1" "d"
1476826133.898794 [0 127.0.0.1:52369] "hget" "zc:k:ea6_RESOLVED_STORES_D1BEFA03C79CA0B84ECC488DEA96BC68" "d"
1476826133.905738 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_STORE_DEFAULT_10__235__32__1080MAGENTO2" "d"
... more ...
1476826210.634998 [0 127.0.0.1:52439] "hmset" "zc:k:ea6_MVIEW_CONFIG" "d" "a:18:{s:19:\"design_config_dummy\";a:4:{s:7:\"view_id\";s:19:\"design_config_dummy\";s:12:\"action_class\";s:39:\"Magento\\Theme\\Model\\Indexer\\Mview\\Dummy\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:0:{}}s:14:\"customer_dummy\";a:4:{s:7:\"view_id\";s:14:\"customer_dummy\";s:12:\"action_class\";s:42:\"Magento\\Customer\\Model\\Indexer\\Mview\\Dummy\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:0:{}}s:13:\"cms_page_grid\";a:4:{s:7:\"view_id\";s:13:\"cms_page_grid\";s:12:\"action_class\";s:43:\"Magento\\Catalog\\Model\\Indexer\\Category\\Flat\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:1:{s:8:\"cms_page\";a:3:{s:4:\"name\";s:8:\"cms_page\";s:6:\"column\";s:7:\"page_id\";s:18:\"subscription_model\";N;}}}s:21:\"catalog_category_flat\";a:4:{s:7:\"view_id\";s:21:\"catalog_category_flat\";s:12:\"action_class\";s:43:\"Magento\\Catalog\\Model\\Indexer\\Category\\Flat\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:6:{s:23:\"catalog_category_entity\";a:3:{s:4:\"name\";s:23:\"catalog_category_entity\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";N;}s:31:\"catalog_category_entity_decimal\";a:3:{s:4:\"name\";s:31:\"catalog_category_entity_decimal\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:27:\"catalog_category_entity_int\";a:3:{s:4:\"name\";s:27:\"catalog_category_entity_int\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:28:\"catalog_category_entity_text\";a:3:{s:4:\"name\";s:28:\"catalog_category_entity_text\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:31:\"catalog_category_entity_varchar\";a:3:{s:4:\"name\";s:31:\"catalog_category_entity_varchar\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:32:\"catalog_category_entity_datetime\";a:3:{s:4:\"name\";s:32:\"catalog_category_entity_datetime\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}}}s:24:\"catalog_category_product\";a:4:{s:7:\"view_id\";s:24:\"catalog_category_product\";s:12:\"action_class\";s:46:\"Magento\\Catalog\\Model\\Indexer\\Category\\Product\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:2:{s:23:\"catalog_category_entity\";a:3:{s:4:\"name\";s:23:\"catalog_category_entity\";s:6:\"column\"
... more ...
Commande ping Valkey
valkey-cli ping
La réponse attendue est : PONG
Si les deux commandes ont réussi, Valkey est correctement configuré.
Inspecter des données compressées
Pour examiner les données de session compressées et le cache de page, utilisez l’outil RESP.app. Il prend en charge la décompression automatique des données de session Commerce 2 et du cache de page et affiche les données de session PHP dans un format lisible par l'utilisateur.