Bonnes pratiques relatives à la configuration du service Redis
- Configuration du cache L2 Redis
- Activer la connexion esclave Redis
- Pré-charger les clés
- Activer le cache obsolète
- Séparer le cache Redis de la session Redis
- Compressez le cache Redis et utilisez
gzip
pour une compression plus élevée
Configuration du cache L2 Redis
Configurez le cache Redis L2 en définissant la variable de déploiement REDIS_BACKEND
dans le fichier de configuration .magento.env.yaml
.
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
Pour la configuration de l’environnement sur l’infrastructure cloud, consultez la REDIS_BACKEND
dans le guide Commerce sur l’infrastructure cloud.
Pour les installations sur site, consultez Configuration de la mise en cache de page Redis dans le Guide de configuration.
ece-tools
. Sinon, effectuez une mise à niveau vers la dernière version. Vous pouvez vérifier la version installée dans votre environnement local à l’aide de la commande de l’interface de ligne de commande composer show magento/ece-tools
.Dimensionnement de la mémoire cache L2 (Adobe Commerce Cloud)
Le cache L2 utilise un système de fichiers temporairecomme mécanisme de stockage. Par rapport aux systèmes de base de données clé-valeur spécialisés, un système de fichiers temporaires ne dispose pas d’une politique d’éviction des clés pour contrôler l’utilisation de la mémoire.
L’absence de contrôle de l’utilisation de la mémoire peut entraîner une augmentation de l’utilisation de la mémoire cache L2 au fil du temps en accumulant le cache obsolète.
Pour éviter l’épuisement de la mémoire des implémentations du cache L2, Adobe Commerce efface le stockage lorsqu’un certain seuil est atteint. La valeur de seuil par défaut est de 95 %.
Il est important d’ajuster l’utilisation maximale de la mémoire cache L2 en fonction des exigences du projet pour le stockage en cache. Utilisez l’une des méthodes suivantes pour configurer le dimensionnement du cache de mémoire :
- Créez un ticket d’assistance pour demander des modifications de taille du montage
/dev/shm
. - Ajustez la propriété
cleanup_percentage
au niveau de l’application pour limiter le pourcentage de remplissage maximal du stockage. La mémoire libre restante peut être utilisée par d’autres services.
Vous pouvez ajuster la configuration dans la configuration de déploiement sous le groupe de configuration du cachecache/frontend/default/backend_options/cleanup_percentage
.
cleanup_percentage
a été introduite dans Adobe Commerce 2.4.4.Le code suivant illustre un exemple de configuration dans le fichier .magento.env.yaml
:
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
cleanup_percentage: 90
Les exigences de cache peuvent varier en fonction de la configuration du projet et du code tiers personnalisé. La portée du dimensionnement de la mémoire cache L2 permet au cache L2 de fonctionner sans trop d’accès au seuil.
Idéalement, l’utilisation de la mémoire cache L2 doit se stabiliser à un certain niveau en dessous du seuil, afin d’éviter des effacements de stockage fréquents.
Vous pouvez vérifier l’utilisation de la mémoire cache L2 sur chaque nœud du cluster à l’aide de la commande d’interface de ligne de commande suivante et en recherchant la ligne /dev/shm
.
L’utilisation peut varier d’un nœud à l’autre, mais elle doit converger vers la même valeur.
df -h
Activer la connexion esclave Redis
Activez une connexion esclave Redis dans le fichier de configuration .magento.env.yaml
pour permettre à un seul nœud de gérer le trafic en lecture-écriture tandis que les autres nœuds gèrent le trafic en lecture seule.
stage:
deploy:
REDIS_USE_SLAVE_CONNECTION: true
Voir REDIS_USE_SLAVE_CONNECTION dans le Guide de Commerce sur les infrastructures cloud.
Pour les installations sur site d’Adobe Commerce, configurez la nouvelle mise en œuvre du cache Redis à l’aide des commandes bin/magento:setup
. Voir Utiliser Redis pour le cache par défaut dans le Guide de configuration.
Pré-charger les clés
Pour réutiliser les données entre les pages, répertoriez les clés à précharger dans le fichier de configuration .magento.env.yaml
.
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
id_prefix: '061_' # Prefix for keys to be preloaded
backend_options:
preload_keys: # List the keys to be preloaded
- '061_EAV_ENTITY_TYPES:hash'
- '061_GLOBAL_PLUGIN_LIST:hash'
- '061_DB_IS_UP_TO_DATE:hash'
- '061_SYSTEM_DEFAULT:hash'
Pour les installations sur site, consultez la section Fonctionnalité de préchargement Redis du Guide de configuration.
Activer le cache obsolète
Réduisez les temps d’attente de verrouillage et améliorez les performances, en particulier lorsque vous traitez de nombreux blocs et clés de cache, en utilisant un cache obsolète tout en générant un nouveau cache en parallèle. Activez le cache obsolète et définissez les types de cache dans le fichier de configuration config.php
(cloud uniquement) :
'cache' => [
'frontend' => [
'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' => '4',
'port' => '6370',
'password' => ''
],
'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']
],
]
full_page
n’est pas pertinent pour Adobe Commerce sur les projets d’infrastructure cloud, car ils utilisent Fastly.Pour la configuration des installations sur site, consultez Options de cache obsolètes dans le Guide de configuration.
Séparer le cache Redis des instances de session
La séparation du cache Redis de la session Redis vous permet de gérer le cache et les sessions indépendamment. Cela empêche les problèmes de cache d’affecter les sessions, ce qui pourrait avoir un impact sur le chiffre d’affaires. Chaque instance Redis s’exécute sur son propre noyau, ce qui améliore les performances.
-
Mettez à jour le fichier de configuration
.magento/services.yaml
.code language-yaml mysql: type: mysql:10.4 disk: 35000 redis: type: redis:6.0 redis-session: # This is for the new Redis instance type: redis:6.0 search: type: elasticsearch:7.9 disk: 5000 rabbitmq: type: rabbitmq:3.8 disk: 2048
-
Mettez à jour le fichier de configuration
.magento.app.yaml
.code language-yaml relationships: database: "mysql:mysql" redis: "redis:redis" redis-session: "redis-session:redis" # Relationship of the new Redis instance search: "search:elasticsearch" rabbitmq: "rabbitmq:rabbitmq"
-
Envoyez un ticket d’assistance Adobe Commerce pour demander la mise en service d’une nouvelle instance Redis dédiée aux sessions dans les environnements de production et d’évaluation. Incluez les fichiers de configuration
.magento/services.yaml
et.magento.app.yaml
mis à jour. Cela n’entraîne pas d’interruption, mais un déploiement est nécessaire pour activer le nouveau service. -
Vérifiez que la nouvelle instance est en cours d’exécution et notez le numéro de port.
code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
-
Ajoutez le numéro de port au fichier de configuration
.magento.env.yaml
.note important IMPORTANT Configurez le port de session Redis uniquement si ece-tools
ne parvient pas à le détecter automatiquement à partir de la définition du service de sessionMAGENTO_CLOUD_RELATIONSHIPS
Redis.note note NOTE disable_locking
doit être défini sur1
.code language-yaml SESSION_CONFIGURATION: _merge: true redis: timeout: 5 disable_locking: 1 bot_first_lifetime: 60 bot_lifetime: 7200 max_lifetime: 2592000 min_lifetime: 60
-
Supprimez les sessions de la base de données par défaut (
db 0
) sur l’instance de cache Redis.code language-bash redis-cli -h 127.0.0.1 -p 6374 -n 0 FLUSHDB
Pendant le déploiement, les lignes suivantes doivent s’afficher dans le journal de génération et de déploiement :
W: - Downloading colinmollenhour/credis (1.11.1)
W: - Downloading colinmollenhour/php-redis-session-abstract (v1.4.5)
...
W: - Installing colinmollenhour/credis (1.11.1): Extracting archive
W: - Installing colinmollenhour/php-redis-session-abstract (v1.4.5): Extracting archive
...
[2022-08-17 01:13:40] INFO: Version of service 'redis' is 6.0
[2022-08-17 01:13:40] INFO: Version of service 'redis-session' is 6.0
[2022-08-17 01:13:40] INFO: redis-session will be used for session if it was not override by SESSION_CONFIGURATION
Compression du cache
Si vous utilisez plus de 6 Go de Redis maxmemory
, vous pouvez utiliser la compression du cache pour réduire l’espace consommé par les clés. Sachez qu'il y a un compromis à faire avec le rendement côté client. Si vous disposez de processeurs supplémentaires, activez-les. Voir Utilisation de Redis pour le stockage de session dans le Guide de configuration.
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true;
frontend:
default:
backend_options:
compress_data: 4 # 0-9
compress_tags: 4 # 0-9
compress_threshold: 20480 # don't compress files smaller than this value
compression_lib: 'gzip' # snappy and lzf for performance, gzip for high compression (~69%)
Activer la libération asynchrone Redis (lazyfree)
Pour activer le lazyfree
sur Adobe Commerce sur les infrastructures cloud, envoyez un ticket d’assistance Adobe Commerce en demandant que la configuration Redis suivante soit appliquée à votre ou vos environnements :
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes
Lorsque lazyfree est activé, Redis décharge la récupération de mémoire vers les threads d’arrière-plan pour les évictions, les expirations, les suppressions initiées par le serveur, les suppressions d’utilisateurs et les vidages de jeux de données de réplication. Cela réduit le blocage du thread principal et peut réduire la latence des requêtes.
lazyfree-lazy-user-del yes
fait en sorte que la commande DEL
se comporte comme UNLINK
, ce qui annule immédiatement le lien entre les clés et libère leur mémoire de manière asynchrone.Activer les E/S multithreads Redis
Pour activer le threading Redis I/O sur Adobe Commerce sur l’infrastructure cloud, envoyez un ticket d’assistance Adobe Commerce en demandant la configuration ci-dessous. Cela peut améliorer le débit en déchargeant les lectures/écritures socket et l’analyse des commandes du thread principal, au détriment d’une utilisation plus élevée de CPU. Validez sous charge et surveillez vos hôtes.
io-threads-do-reads yes
io-threads 8 # choose a value lower than the number of CPU cores (check with nproc), then tune under load
io-threads
ou désactivez les lectures dans les threads d’E/S.Augmenter les délais d’expiration et les reprises du client Redis
Augmentez la tolérance du client du cache à la saturation transitoire en ajustant les options du serveur principal dans .magento.env.yaml
:
stage:
deploy:
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
read_timeout: 10
connect_retries: 5
Ces paramètres augmentent la tolérance du client pour réduire la congestion sur Redis en étendant la fenêtre d’attente de réponse et en réessayant la configuration de la connexion. Cela peut réduire les erreurs de cannot connect to localhost:6370
intermittentes et de délai d’expiration de lecture pendant les pics courts.