[Nur PaaS]{class="badge informative" title="Gilt nur für Adobe Commerce in Cloud-Projekten (von Adobe verwaltete PaaS-Infrastruktur) und lokale Projekte."}

Best Practices für die Konfiguration des Redis-Service

  • Konfigurieren des Redis-L2-Cache
  • Redis-Slave-Verbindung aktivieren
  • Schlüssel vorab laden
  • Veralteten Cache aktivieren
  • Trennen des Redis-Cache von der Redis-Sitzung
  • Komprimiert den Redis-Cache und verwendet gzip für eine höhere Komprimierung.

Konfigurieren des Redis-L2-Cache

Konfigurieren Sie den Redis-L2-Cache, indem Sie die REDIS_BACKEND-Bereitstellungsvariable in der .magento.env.yaml-Konfigurationsdatei festlegen.

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'

Informationen zur Umgebungskonfiguration in der Cloud-Infrastruktur finden Sie in den REDIS_BACKEND im Handbuch zu Commerce in der Cloud-Infrastruktur.

Bei On-Premise-Installationen finden Sie weitere Informationen unter Konfigurieren des RedisSeitencachings im Konfigurationshandbuch.

NOTE
Stellen Sie sicher, dass Sie die neueste Version des ece-tools verwenden. Falls nicht, aktualisieren Sie auf die neueste Version. Sie können die in Ihrer lokalen Umgebung installierte Version mithilfe des composer show magento/ece-tools CLI-Befehls überprüfen.

L2-Cache-Speicherdimensionierung (Adobe Commerce Cloud)

Der L2-Cache verwendet ein temporäres Dateisystem als Speichermechanismus. Im Vergleich zu spezialisierten Schlüssel-Wert-Datenbanksystemen verfügt ein temporäres Dateisystem nicht über eine Richtlinie zum Verdrängen von Schlüsseln, um die Speichernutzung zu kontrollieren.

Fehlende Speicherbelegungskontrolle kann dazu führen, dass die Speicherbelegung im L2-Cache im Laufe der Zeit zunimmt, indem der veraltete Cache gesammelt wird.

Um zu vermeiden, dass der Arbeitsspeicher bei L2-Cache-Implementierungen erschöpft ist, löscht Adobe Commerce den Speicher, wenn ein bestimmter Schwellenwert erreicht wird. Der standardmäßige Schwellenwert ist 95 %.

Es ist wichtig, die maximale Speicherauslastung des L2-Cache basierend auf den Projektanforderungen für Cache-Speicher anzupassen. Verwenden Sie eine der folgenden Methoden, um die Cache-Größe des Speichers zu konfigurieren:

  • Erstellen Sie ein Support-Ticket, um Größenänderungen der /dev/shm anzufordern.
  • Passen Sie die cleanup_percentage auf Anwendungsebene an, um den maximalen Füllprozentsatz des Speichers zu begrenzen. Der verbleibende freie Speicher kann von anderen Diensten genutzt werden.
    Sie können die Konfiguration in der Bereitstellungskonfiguration unter der Cache-Konfigurationsgruppe cache/frontend/default/backend_options/cleanup_percentage anpassen.
NOTE
Die cleanup_percentage konfigurierbare Option wurde in Adobe Commerce 2.4.4 eingeführt.

Der folgende Code zeigt eine Beispielkonfiguration in der .magento.env.yaml:

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
    CACHE_CONFIGURATION:
      _merge: true
      frontend:
        default:
          backend_options:
            cleanup_percentage: 90

Die Cache-Anforderungen können je nach Projektkonfiguration und benutzerdefiniertem Code von Drittanbietern variieren. Aufgrund des Umfangs der Speicherdimensionierung für den L2-Cache kann der L2-Cache ohne zu viele Schwellenwerttreffer ausgeführt werden.
Idealerweise sollte sich die Speicherauslastung des L2-Caches auf einem bestimmten Niveau unterhalb des Schwellenwerts stabilisieren, nur um eine häufige Speicherbereinigung zu vermeiden.

Sie können die Speicherauslastung des L2-Cache-Speichers auf jedem Knoten des Clusters mit dem folgenden CLI-Befehl überprüfen und nach der /dev/shm suchen.
Die Nutzung kann von Knoten zu Knoten variieren, sollte aber auf denselben Wert fallen.

df -h

Redis-Slave-Verbindung aktivieren

Aktivieren Sie in der .magento.env.yaml-Konfigurationsdatei eine Redis-Slave-Verbindung, damit nur ein Knoten Lese-/Schreibdatenverkehr verarbeiten kann, während die anderen Knoten nur den schreibgeschützten Datenverkehr verarbeiten.

stage:
  deploy:
    REDIS_USE_SLAVE_CONNECTION: true

Siehe REDIS_USE_SLAVE_CONNECTION im Handbuch zu Commerce in Cloud-Infrastrukturen.

Konfigurieren Sie bei lokalen Adobe Commerce-Installationen die neue Redis-Cache-Implementierung mithilfe der bin/magento:setup. Siehe Verwenden von Redis für den-Cache) im Konfigurationshandbuch.

WARNING
Konfigurieren nicht eine Redis-Slave-Verbindung für Cloud-Infrastrukturprojekte mit einer skalierten/geteilten Architektur. Dies verursacht Redis-Verbindungsfehler. Siehe Anleitung zur Redis-Konfiguration im Handbuch zu Commerce Cloud-Infrastruktur.

Schlüssel vorab laden

Um Daten zwischen Seiten wiederzuverwenden, listen Sie die Schlüssel zum Vorausfüllen in der .magento.env.yaml-Konfigurationsdatei auf.

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'

Bei On-Premise-Installationen finden Sie weitere Informationen unter Redis-Vorabladefunktion im Konfigurationshandbuch.

Veralteten Cache aktivieren

Verringern Sie die Sperrwartezeiten und verbessern Sie die Leistung - insbesondere bei der Verarbeitung zahlreicher Blöcke und Cache-Schlüssel - durch die Verwendung eines veralteten Cache bei gleichzeitiger Generierung eines neuen Cache. Veralteten Cache aktivieren und Cache-Typen in der config.php-Konfigurationsdatei definieren (nur Cloud):

'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
Im vorherigen Beispiel ist der full_page-Cache für Adobe Commerce für Cloud-Infrastrukturprojekte nicht relevant, da sie „Fastly verwenden.

Informationen zum Konfigurieren von On-Premise-Installationen finden Sie unter Veraltete Cache im Konfigurationshandbuch.

Separater Redis-Cache und Sitzungsinstanzen

Wenn Sie den Redis-Cache von der Redis-Sitzung trennen, können Sie den Cache und die Sitzungen unabhängig verwalten. Cache-Probleme werden so verhindert, dass Sitzungen beeinträchtigt werden, was sich auf den Umsatz auswirken könnte. Jede Redis-Instanz wird auf ihrem eigenen Kern ausgeführt, wodurch die Leistung verbessert wird.

  1. Aktualisieren Sie die .magento/services.yaml Konfigurationsdatei.

    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. Aktualisieren Sie die .magento.app.yaml Konfigurationsdatei.

    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. Senden Sie ein Adobe Commerce-Support-Ticket, um die Bereitstellung einer neuen Redis-Instanz anzufordern, die Sitzungen in Produktions- und Staging-Umgebungen gewidmet ist. Schließen Sie die aktualisierten .magento/services.yaml und .magento.app.yaml Konfigurationsdateien ein. Dies führt zu keinen Ausfallzeiten, erfordert jedoch eine Bereitstellung, um den neuen Service zu aktivieren.

  4. Stellen Sie sicher, dass die neue Instanz ausgeführt wird, und notieren Sie sich die Portnummer.

    code language-bash
    echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
    
  5. Fügen Sie die Portnummer zur .magento.env.yaml hinzu.

    note important
    IMPORTANT
    Konfigurieren Sie den Redis-Sitzungs-Port nur, wenn ece-tools ihn nicht automatisch aus der Definition des MAGENTO_CLOUD_RELATIONSHIPS Redis-Sitzungs-Service erkennen kann.
    note note
    NOTE
    disable_locking muss auf 1 gesetzt werden.
    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. Entfernen Sie Sitzungen aus der Standarddatenbank (db 0) auf der Redis-Cache-Instanz.

    code language-bash
    redis-cli -h 127.0.0.1 -p 6374 -n 0 FLUSHDB
    

Während der Bereitstellung sollten die folgenden Zeilen im „Build- Bereitstellungsprotokoll“ angezeigt:

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

Cache-Komprimierung

Wenn Sie mehr als 6 GB Redis-maxmemory verwenden, können Sie die Cache-Komprimierung verwenden, um den von den Schlüsseln belegten Speicherplatz zu reduzieren. Beachten Sie, dass es einen Zielkonflikt mit der Client-seitigen Leistung gibt. Wenn Sie CPUs haben, aktivieren Sie diese. Siehe Verwenden von Redis für die Sitzungsspeicherung im Konfigurationshandbuch.

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%)

Asynchrone Redis-Freigabe aktivieren (verzögerungsfrei)

Um lazyfree in Adobe Commerce auf der Cloud-Infrastruktur zu aktivieren, senden Sie ein Adobe Commerce-SupportTicket, mit dem die folgende Redis-Konfiguration auf Ihre Umgebung(en) angewendet werden soll(en):

lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes

Wenn LazyFree aktiviert ist, lädt Redis die Speicherrückgewinnung auf Hintergrund-Threads aus, um Entfernungen, Abläufe, serverinitiierte Löschvorgänge, Benutzerlöschvorgänge und Replikatdatensatzleerungen zu verhindern. Dies reduziert die Blockierung des Haupt-Threads und kann die Anfragelatenz verringern.

NOTE
Durch die Option lazyfree-lazy-user-del yes verhält sich der DEL-Befehl wie UNLINK, wodurch die Verknüpfung von Schlüsseln sofort aufgehoben wird und der Speicher asynchron freigegeben wird.
WARNING
Da die Freigabe im Hintergrund erfolgt, bleibt der von gelöschten/abgelaufenen/entfernten Schlüsseln verwendete Speicher zugewiesen, bis die Arbeit von Hintergrund-Threads abgeschlossen ist. Wenn Ihr Redis bereits unter engem Speicherdruck steht, testen Sie ihn vorsichtig und reduzieren Sie zuerst den Speicherdruck (z. B. deaktivieren Sie den Block-Cache für bestimmte Fälle und trennen Sie Cache- und Sitzungs-Redis-Instanzen wie oben beschrieben).

Redis Multithread I/O aktivieren

Um das Redis-I/O-Threading in Adobe Commerce in der Cloud-Infrastruktur zu aktivieren, senden Sie ein Adobe Commerce Support-Ticket mit der unten stehenden Konfigurationsanfrage. Dies kann den Durchsatz verbessern, indem Socket-Lese-/Schreibvorgänge und Befehlsparsing vom Haupt-Thread ausgelagert werden, was zulasten einer höheren CPU-Nutzung geht. Validieren Sie unter Last und überwachen Sie Ihre Hosts.

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
I/O-Threads parallelisieren nur Client-I/O und Parsing. Die Ausführung des Redis-Befehls erfolgt weiterhin in einem einzigen Thread.
WARNING
Die Aktivierung von I/O-Threads kann die Nutzung von CPU erhöhen und nützt nicht jeder Arbeitslast. Beginnen Sie mit einem konservativen Wert und Benchmark. Wenn die Latenz ansteigt oder CPU überlastet ist, reduzieren Sie io-threads oder deaktivieren Sie Lesevorgänge in I/O-Threads.

Maximale Wartezeiten und erneute Versuche des Redis-Clients erhöhen

Erhöhen Sie die Toleranz des Cache-Clients auf die vorübergehende Sättigung, indem Sie die Backend-Optionen in .magento.env.yaml anpassen:

stage:
  deploy:
    CACHE_CONFIGURATION:
      _merge: true
      frontend:
        default:
          backend_options:
            read_timeout: 10
            connect_retries: 5

Diese Einstellungen erhöhen die Client-Toleranz, um die Überlastung auf Redis zu beschleunigen, indem das Wartefenster für die Antwort verlängert und die Verbindungseinrichtung erneut versucht wird. Dadurch können zeitweise auftretende cannot connect to localhost:6370- und Lesezeitüberschreitungsfehler während kurzer Spitzen reduziert werden.

NOTE
Sie sind keine Fehlerbehebung bei persistenter Überlastung.

Weitere Informationen

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