[PaaS uniquement]{class="badge informative" title="S’applique uniquement aux projets Adobe Commerce on Cloud (infrastructure PaaS gérée par Adobe) et aux projets On-premise."}

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.

NOTE
Vérifiez que vous utilisez la dernière version du package 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 cache cache/frontend/default/backend_options/cleanup_percentage.
NOTE
L’option configurable 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.

WARNING
Ne configurez pas une connexion esclave Redis pour les projets d’infrastructure cloud avec une architecture mise à l’échelle/partagée. Cela entraîne des erreurs de connexion Redis. Voir Guide de configuration Redis dans le guide Commerce sur les infrastructures cloud.

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']
        ],
    ]
NOTE
Dans l’exemple précédent, le cache 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.

  1. 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
    
  2. 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"
    
  3. 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.

  4. 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
    
  5. 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 session MAGENTO_CLOUD_RELATIONSHIPS Redis.
    note note
    NOTE
    disable_locking doit être défini sur 1.
    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
    
  6. 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.

NOTE
L’option 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.
WARNING
Comme la libération se produit en arrière-plan, la mémoire utilisée par les clés supprimées/expirées/évincées reste allouée jusqu’à ce que les threads d’arrière-plan terminent le travail. Si votre Redis est déjà soumis à une pression de mémoire limitée, testez-le avec précaution et envisagez d’abord de réduire la pression de mémoire (par exemple, en désactivant le cache de bloc pour des cas spécifiques et en séparant le cache et les instances Redis de session comme décrit ci-dessus).

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
NOTE
Les threads d’E/S parallélisent les E/S client et l’analyse uniquement. L’exécution de la commande Redis reste à thread unique.
WARNING
L’activation des threads d’E/S peut augmenter l’utilisation de CPU et ne bénéficie pas à chaque charge de travail. Commencez par une valeur et une référence prudentes. Si la latence augmente ou que le CPU sature, réduisez le 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.

NOTE
Ils ne permettent pas de résoudre les problèmes de surcharge persistante.

Informations supplémentaires

recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60