Best Practices für die Konfiguration des Redis- und Valley-Service
Verwenden Sie diese Empfehlungen, um Redis oder Valkey für das Caching und die Sitzungen von Adobe Commerce zu konfigurieren.
- L2-Cache konfigurieren
- Slave-Verbindung aktivieren
- Schlüssel vorausfüllen
- Veralteten Cache aktivieren
- Cache und Sitzung trennen
- Komprimieren des Cache
- Konfigurationsbeispiele
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 konfigurieren
Konfigurieren Sie den L2-Cache, indem Sie die Bereitstellungsvariable REDIS_BACKEND oder VALKEY_BACKEND in der Konfigurationsdatei .magento.env.yaml festlegen.
Verwenden Sie für Redis:
| code language-yaml |
|---|
|
Informationen zur Umgebungskonfiguration in der Cloud-Infrastruktur finden Sie in REDIS_BACKEND Konfigurationsreferenz im Handbuch Commerce in der Cloud-Infrastruktur.
Bei On-Premise-Installationen finden Sie weitere Informationen unter Konfigurieren des RedisSeitencachings im Konfigurationshandbuch.
Verwenden Sie für Valley Folgendes:
| code language-yaml |
|---|
|
Informationen zur Umgebungskonfiguration in der Cloud-Infrastruktur finden Sie in VALKEY_BACKEND Konfigurationsreferenz im Handbuch Commerce in der Cloud-Infrastruktur.
Informationen zu On-Premise-Installationen finden Sie unter Valkey konfigurieren im Konfigurationshandbuch.
L2-Cache-Speicherdimensionierung für Adobe Commerce Cloud
Der L2-Cache nutzt ein temporäres Dateisystem (/dev/shm) als Speichermechanismus. Im Gegensatz zu spezialisierten Schlüssel-Wert-Speichern gibt es bei tmpfs keine Richtlinie zum Entfernen von Schlüsseln, sodass die Speichernutzung unbegrenzt ansteigen kann. Um eine Überlastung zu vermeiden, löscht Adobe Commerce automatisch den L2-Speicher, wenn die Nutzung einen konfigurierbaren Schwellenwert erreicht (standardmäßig 95 %). Sie können den Speicherverbrauch kontrollieren, indem Sie eine größere /dev/shm anfordern oder den Bereinigungsschwellenwert senken.
Passen Sie die maximale L2-Cache-Speichernutzung an Ihre Projektanforderungen an. Verwenden Sie eine der folgenden Methoden:
- Erstellen Sie ein Support-Ticket, um die Größe der
/dev/shm-Bereitstellung anzupassen. Für dieses Szenario empfiehlt Adobe, die/dev/shm-Bereitstellungsgröße auf 15 GB festzulegen. - Passen Sie die
cleanup_percentageEigenschaft auf Anwendungsebene an, um die Speicherauslastung zu begrenzen und den für andere Services verfügbaren freien Speicher zu nutzen.
Sie können die Konfiguration in der Bereitstellungskonfiguration unter der Cache-Konfigurationsgruppecache/frontend/default/backend_options/cleanup_percentageanpassen.
cleanup_percentage konfigurierbare Option wurde in Adobe Commerce 2.4.4 eingeführt.Die folgenden Beispiele zeigen den Konfigurations-Code in der .magento.env.yaml:
| code language-yaml |
|---|
|
| code language-yaml |
|---|
|
Die Cache-Anforderungen variieren je nach Projektkonfiguration und benutzerdefiniertem Code von Drittanbietern. Größe des L2-Cache-Speichers, damit der Cache ohne häufige Schwellenwerttreffer arbeiten kann.
Idealerweise bleibt die Speicherauslastung des L2-Cache unter dem Schwellenwert, um eine häufige Speicherbereinigung zu vermeiden.
Sie können die Speicherauslastung des L2-Cache auf jedem Knoten des Clusters überprüfen, indem Sie den folgenden CLI-Befehl ausführen und die /dev/shm Zeile überprüfen.
df -h /dev/shm
Die Nutzung kann von Knoten zu Knoten variieren, sollte aber auf einen ähnlichen Wert konvergieren.
Benutzerdefinierte Ordner für den L2-Cache konfigurieren
Bei der Optimierung der L2-Cache-Leistung können Sie die lokalen Cache-Dateien in einem benutzerdefinierten Hochleistungsverzeichnis speichern, z. B. auf einer RAM-Festplatte (/dev/shm/).
Um anwendungsweite Konsistenz zu gewährleisten und fragmentierten Cache-Speicher zu verhindern, konfigurieren Sie sowohl die spezifischen L2-Backend-Optionen als auch die globale Verzeichnisregistrierung in der app/etc/env.php.
Best Practice: Definieren Sie sowohl local_backend_options['cache_dir'] als auch die globale directories['cache']['path'].
local_backend_options['cache_dir']: Leitet den Backend-Cache-Adapter (z. B.Cm_Cache_Backend_File) an, seine synchronisierten L2-Cache-Dateien am angegebenen Speicherort zu speichern.directories['cache']['path']: Aktualisiert die Adobe CommerceDirectoryList-Registrierung und legt den benutzerdefinierten Pfad als endgültiges System-Cache-Verzeichnis für die gesamte Anwendung fest.
Vermeiden von Split-Cache-Verzeichnissen und GlusterFS-Segmentierungsfehlern
Wenn Sie den benutzerdefinierten Pfad ausschließlich im local_backend_options definieren, funktioniert die L2-Cache-Engine ordnungsgemäß, aber die globale Anwendungsregistrierung erkennt var/cache weiterhin als standardmäßigen Cache-Speicherort.
Diese Konfigurationsabweichung führt zu einem „Split-Brain“-Szenario, in dem Drittanbietererweiterungen oder zentrale Ausweichprozesse temporäre Dateien in das standardmäßige var/cache schreiben.
Kritische Auswirkungen auf Adobe Commerce Cloud: Auf Pro-Architekturen wird das var/-Verzeichnis in einem freigegebenen verteilten Dateisystem gemountet. Das Erzwingen von Cache-E/A mit hoher Geschwindigkeit über diese Netzwerkbereitstellung überfordert den Client und ist ein primärer Trigger für GlusterFS-Segmentierungsfehler und Cluster-weite Ausfälle. Durch die Konfiguration beider Einstellungen wird sichergestellt, dass alle Cache-E/A-Vorgänge streng auf der lokalen, leistungsstarken Festplatte bleiben.
Konfigurationsbeispiel
Um ein einzelnes, einheitliches Cache-Verzeichnis zu erzwingen, aktualisieren Sie Ihre env.php-Datei, um beide Konfigurationen einzuschließen:
return [
// 1. Override the global directory registry
'directories' => [
'cache' => [
'path' => '/dev/shm/magento_cache'
]
],
// 2. Configure the L2 cache engine
'cache' => [
'frontend' => [
'default' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'server' => '127.0.0.1',
'port' => '6379',
'database' => '1',
// ... other redis configurations ...
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_cache'
]
]
]
]
],
// ...
];
Slave-Verbindung aktivieren
Aktivieren Sie die Slave-Verbindung in der .magento.env.yaml, damit Adobe Commerce eine zusätzliche schreibgeschützte Cache-Verbindung für Lesevorgänge verwenden kann, während der primäre Endpunkt weiterhin für Schreibvorgänge verwendet wird. Durch diese Konfiguration kann die Leselast auf dem primären Cache-Service reduziert und der Lesetraffic effektiver verteilt werden.
Verwenden Sie für Redis:
| code language-yaml |
|---|
|
Informationen zur Umgebungskonfiguration für die Commerce Cloud-Infrastruktur finden Sie unter REDIS_USE_SLAVE_CONNECTION im Handbuch für Commerce in Cloud-Infrastruktur.
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.
Verwenden Sie für Valley Folgendes:
| code language-yaml |
|---|
|
Informationen zur Umgebungskonfiguration für die Commerce Cloud-Infrastruktur finden Sie unter VALKEY_USE_SLAVE_CONNECTION im Handbuch für Commerce in Cloud-Infrastruktur.
Konfigurieren Sie bei lokalen Adobe Commerce-Installationen die neue Valkey-Cache-Implementierung mithilfe der bin/magento setup. Siehe Konfigurieren von Valkey im Konfigurationshandbuch.
Schlüssel vorausfüllen
Magento lädt normalerweise Cache-Einträge aus Redis oder Valkey einzeln. Mit der Vorabladefunktion können Sie eine Liste häufig verwendeter Schlüssel bereitstellen, die Magento bei dem ersten Zugriff während einer Anfrage in einer einzigen Pipeline abruft. Magento speichert die abgerufenen Werte dann für den Rest der Anfrage im PHP-Speicher, was die wiederholten Roundtrips zu Redis oder Valkey reduziert und die Bootstrap-Performance der Anfragen für diese Schlüssel verbessern kann.
Häufig verwendete Tasten können durch die Überwachung aktiver Befehle auf Redis oder Valley identifiziert werden:
Die Vorabladeschlüssel werden in der .magento.env.yaml-Konfigurationsdatei konfiguriert.
| code language-yaml |
|---|
|
Um die Schlüssel aufzulisten, führen Sie den folgenden Befehl aus:
| code language-terminal |
|---|
|
Drücken Sie nach 10 Sekunden Ctrl+C. Führen Sie dann den folgenden Befehl aus:
| code language-terminal |
|---|
|
In diesem Protokoll werden die Schlüssel aufgelistet, die Sie vorab laden können. Um den Inhalt eines Schlüssels anzuzeigen, führen Sie den folgenden Befehl aus:
| code language-terminal |
|---|
|
Bei On-Premise-Installationen finden Sie weitere Informationen unter Redis-Vorabladefunktion im Konfigurationshandbuch.
Die Vorabladeschlüssel werden in der .magento.env.yaml-Konfigurationsdatei konfiguriert.
| code language-yaml |
|---|
|
Um die Schlüssel aufzulisten, führen Sie den folgenden Befehl aus:
| code language-terminal |
|---|
|
Drücken Sie nach 10 Sekunden Ctrl+C. Führen Sie dann den folgenden Befehl aus:
| code language-terminal |
|---|
|
In diesem Protokoll werden die Schlüssel aufgelistet, die Sie vorab laden können. Um den Inhalt eines Schlüssels anzuzeigen, führen Sie den folgenden Befehl aus:
| code language-terminal |
|---|
|
Informationen zu lokalen Installationen finden Sie unter Valkey-Vorabladefunktion im Konfigurationshandbuch.
Veralteten Cache aktivieren
Veralteter Cache ist eine L2-Cache-Funktion von RemoteSynchronizedCache. Wenn diese Option aktiviert ist, kann Adobe Commerce einen vorhandenen lokalen Cache-Wert aus /dev/shm bereitstellen, während eine andere Anfrage bereits denselben Eintrag neu generiert, anstatt jede gleichzeitige Anfrage warten zu lassen. Dadurch werden Cache-Stampedes und Sperrkonflikte bei der Neuerstellung teurer Cache-Einträge reduziert.
Funktionsweise
Mit RemoteSynchronizedCache verwaltet Magento zwei Kopien jedes Cache-Eintrags: eine lokale Kopie in /dev/shm und eine Remote-Kopie in Redis oder Valkey. Wenn die Remote Copy nicht verfügbar ist und bereits eine Regenerierungssperre für diesen Schlüssel vorhanden ist, können gleichzeitige -Anfragen den vorherigen lokalen Wert empfangen, anstatt zu warten, bis der neue Wert geschrieben wird.
Um den veralteten Cache zu aktivieren, konfigurieren Sie ihn in der .magento.env.yaml.
Für Redis:
| code language-yaml |
|---|
|
Für Valley:
| code language-yaml |
|---|
|
full_page-Cache-Typ ist für Adobe Commerce in Cloud-Infrastrukturprojekten nicht relevant, da sie "" .Informationen zu On-Premise-Installationen finden Sie unter Veraltete Cache im Konfigurationshandbuch.
default-Cache, das veraltetes Cache-Verhalten auf alle Cache-Einträge anwendet, die dieses Frontend verwenden. Magento Core-Cache-Typen funktionieren in der Regel mit dieser Einstellung wie erwartet. Wenn Ihr Projekt jedoch benutzerdefinierten Code oder Erweiterungen enthält, die über die generische \Magento\Framework\App\Cache-API (z. B. $this->cache->save()) ohne dediziertes Cache-Frontend in den Cache schreiben, können diese Einträge während der Regenerierung auch veraltete Werte liefern.default-Frontend deaktiviert und aktivieren Sie ihn nur für ausgewählte Cache-Typen, wie es häufig lokal) .Veralteter Cache pro Cache-Typ einzeln aktivieren
Sie können veralteten Cache nur für ausgewählte Cache-Typen aktivieren, indem Sie ein dediziertes Cache-Frontend in .magento.env.yaml definieren und die ausgewählten Cache-Typen ihm zuordnen.
Um ordnungsgemäß zu funktionieren, muss das benutzerdefinierte Frontend als vollständiges Frontend unter CACHE_CONFIGURATION.frontend definiert werden. Es reicht nicht aus, nur use_stale_cache: true für einen neuen Frontend-Namen zu definieren.
Beispielkonfigurationen
Für Redis:
| code language-yaml |
|---|
|
Für Valley:
| code language-yaml |
|---|
|
stale_cache_enabled, damit das neue Frontend dasselbe Verhalten beibehält.Separate Cache- und Sitzungsinstanzen
Wenn Sie den Cache von den Sitzungen trennen, können Sie diese unabhängig verwalten. Es verringert Konflikte zwischen Cache- und Sitzungs-Traffic, verhindert, dass Cache-bedingter Druck sich auf Sitzungen auswirkt, und ermöglicht die Dimensionierung und Abstimmung jeder Redis- oder Valley-Instanz auf ihre eigene Arbeitslast.
Gehen Sie wie folgt vor, um eine dedizierte Instanz für Sitzungen bereitzustellen:
-
Aktualisieren Sie die
.magento/services.yamlKonfigurationsdatei.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 -
Aktualisieren Sie die
.magento.app.yamlKonfigurationsdatei.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" -
Fordern Sie eine neue Redis-Instanz für Sitzungen in Produktions- und Staging-Umgebungen an.
Senden Sie ein Adobe Commerce-Support-Ticket. Schließen Sie die aktualisierten
.magento/services.yamlund.magento.app.yamlKonfigurationsdateien ein.Dieses Update verursacht keine Ausfallzeiten, erfordert jedoch eine Bereitstellung, um den neuen Service zu aktivieren.
-
Stellen Sie sicher, dass die neue Instanz ausgeführt wird, und notieren Sie die Portnummer.
code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp -
Fügen Sie die Portnummer zur
.magento.env.yamlhinzu.note important IMPORTANT Konfigurieren Sie den Redis-Sitzungs-Port nur, wenn ece-toolsihn nicht automatisch aus der Definition desMAGENTO_CLOUD_RELATIONSHIPSRedis-Sitzungs-Service erkennen kann.note note NOTE Für optimale Leistung disable_lockingauf1gesetzt. In seltenen Fällen, in denen Wettlaufsituationen aufgrund einer hohen Aktivität von gleichzeitigen Sitzungen auftreten, aktivieren Sie die Sperrung, indem Sie0festlegen.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 -
Entfernen Sie Sitzungen aus der Standarddatenbank (
db 0) auf der Redis-Cache-Instanz.code language-terminal redis-cli -h 127.0.0.1 -p 6370 -n 0 FLUSHDB
-
Aktualisieren Sie die
.magento/services.yamlKonfigurationsdatei.code language-yaml mysql: type: mysql:10.4 disk: 35000 valkey: type: valkey:8.0 valkey-session: # This is for the new Valkey instance type: valkey:8.0 search: type: elasticsearch:7.9 disk: 5000 rabbitmq: type: rabbitmq:3.8 disk: 2048 -
Aktualisieren Sie die
.magento.app.yamlKonfigurationsdatei.code language-yaml relationships: database: "mysql:mysql" valkey: "valkey:valkey" valkey-session: "valkey-session:valkey" # Relationship of the new Valkey instance search: "search:elasticsearch" rabbitmq: "rabbitmq:rabbitmq" -
Fordern Sie eine neue Valley-Instanz an, die Sitzungen zu Produktions- und Staging-Umgebungen gewidmet ist.
Senden Sie ein Adobe Commerce-Support-Ticket. Schließen Sie die aktualisierten
.magento/services.yamlund.magento.app.yamlKonfigurationsdateien ein.Dieses Update verursacht keine Ausfallzeiten, erfordert jedoch eine Bereitstellung, um den neuen Service zu aktivieren.
-
Stellen Sie sicher, dass die neue Instanz ausgeführt wird, und notieren Sie die Portnummer.
code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp -
Fügen Sie die Portnummer zur
.magento.env.yamlhinzu.note important IMPORTANT Konfigurieren Sie den Valkey-Sitzungs-Port nur, wenn ece-toolsihn nicht automatisch aus der Definition desMAGENTO_CLOUD_RELATIONSHIPSValkey-Sitzungs-Service erkennen kann.note note NOTE Für optimale Leistung disable_lockingauf1gesetzt. In seltenen Fällen, in denen Wettlaufsituationen aufgrund einer hohen Aktivität von gleichzeitigen Sitzungen auftreten, aktivieren Sie die Sperrung, indem Sie0festlegen.code language-yaml SESSION_CONFIGURATION: _merge: true redis: # keep 'redis' even if you are using Valkey. timeout: 5 disable_locking: 1 bot_first_lifetime: 60 bot_lifetime: 7200 max_lifetime: 2592000 min_lifetime: 60 -
Entfernen Sie Sitzungen aus der Standarddatenbank (
db 0) auf der Valkey-Cache-Instanz.code language-terminal valkey-cli -h 127.0.0.1 -p 6370 -n 0 FLUSHDB
Cache-Komprimierung
Wenn Sie mehr als 6 GB Redis- oder Valkey-maxmemory verwenden, können Sie die Cache-Komprimierung aktivieren, um den von Schlüsseln belegten Speicherplatz zu reduzieren. Beachten Sie, dass diese Einstellung Client-seitige Leistung gegen Speichereinsparungen eintauscht. Wenn Sie über freie CPU-Kapazität verfügen, sollten Sie diese aktivieren. Siehe Verwenden von Redis für oder Verwenden von Valkey für im Konfigurationshandbuch.
stage:
deploy:
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 Freigabe aktivieren
Um die lazyfree in Adobe Commerce auf der Cloud-Infrastruktur zu aktivieren, reichen Sie ein Adobe Commerce-SupportTicket ein, in dem Sie darum bitten, die folgende Redis- oder Valkey-Konfiguration auf Ihre Umgebungen anzuwenden:
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 oder Valley die Speicherrückgewinnung auf Hintergrund-Threads aus, um Auslagerungen, Abläufe, serverinitiierte Löschvorgänge, Benutzerlöschvorgänge und Replikatdatensatzleerungen durchzuführen. Dies reduziert die Blockierung des Haupt-Threads und kann die Anfragelatenz verringern.
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.Multithread-E/A 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 Anfrage zur I/O-Threading-Konfiguration. Diese Konfiguration kann den Durchsatz verbessern, indem Socket-Lese- und -Schreibvorgänge sowie das Parsen von Befehlen vom Haupt-Thread ausgelagert werden, was zulasten einer höheren CPU-Nutzung geht. Validieren Sie unter Last und überwachen Sie Ihre Hosts.
Für Redis:
| code language-text |
|---|
|
Für Valley:
| code language-text |
|---|
|
io-threads oder deaktivieren Sie Lesevorgänge in I/O-Threads.Client-Zeitüberschreitungen und erneute Versuche erhöhen
Erhöhen Sie die Toleranz des Redis- oder Valkey-Cache-Clients auf kurze Zeiträume der Sättigung, indem Sie die Backend-Optionen in .magento.env.yaml anpassen.
stage:
deploy:
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
connect_retries: 3 # Number of connection retries
remote_backend_options:
read_timeout: 10 # Timeout
Diese Einstellungen können unregelmäßige Verbindungs- und Lesezeitüberschreitungsfehler während kurzer Spitzen reduzieren, indem die Verbindungseinrichtung wiederholt wird und mehr Zeit für Antworten von Redis oder Valley bleibt.
Konfigurationsbeispiele
Verwenden Sie die folgenden Beispiele als Ausgangspunkt für Ihre Redis- oder Valley-Service-Konfigurationen.
Anwendung aller Best Practice-Empfehlungen
| code language-yaml |
|---|
|
| code language-yaml |
|---|
|
Wenden Sie alle Best Practice-Empfehlungen an und trennen Sie veraltete Caches nach Cache-Typ
| code language-yaml |
|---|
|
| code language-yaml |
|---|
|
Weitere Informationen
Siehe die folgenden verwandten Themen: