[Endast PaaS]{class="badge informative" title="Gäller endast Adobe Commerce i molnprojekt (Adobe-hanterad PaaS-infrastruktur) och lokala projekt."}

Bästa tillvägagångssätt för Redis-tjänstkonfiguration

  • Konfigurera Redis L2-cache
  • Aktivera Redis-slavanslutning
  • Förinläsningsnycklar
  • Aktivera inaktuell cache
  • Separera Redis-cachen från Redis-sessionen
  • Komprimera Redis-cachen och använd gzip för högre komprimering

Konfigurera Redis L2-cache

Konfigurera Redis L2-cachen genom att ange distributionsvariabeln REDIS_BACKEND i konfigurationsfilen .magento.env.yaml.

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

Om du vill se miljökonfiguration för molninfrastruktur läser du REDIS_BACKEND i Commerce on Cloud Infrastructure Guide.

Information om lokala installationer finns i Konfigurera Redis-sidcache i konfigurationshandboken.

NOTE
Kontrollera att du använder den senaste versionen av paketet ece-tools. Om inte, uppgradera till den senaste versionen. Du kan kontrollera vilken version som är installerad i din lokala miljö med hjälp av CLI-kommandot composer show magento/ece-tools.

L2-cacheminnets storlek (Adobe Commerce Cloud)

L2-cache använder ett tillfälligt filsystem som en lagringsmekanism. Jämfört med specialiserade nyckelvärdesdatabassystem har ett temporärt filsystem ingen nyckelvridarpolicy för att styra minnesanvändningen.

Bristen på kontroll över minnesanvändningen kan få L2-cacheminnets minnesanvändning att växa över tiden genom att det inaktuella cacheminnet samlas.

För att undvika minnesöverbelastning av implementeringar av L2-cache rensar Adobe Commerce lagringsutrymmet när en viss tröskel uppnås. Standardtröskelvärdet är 95 %.

Det är viktigt att justera den maximala användningen av L2-cacheminnet baserat på projektkraven för cache-lagring. Använd någon av följande metoder för att konfigurera minnescachestorleken:

  • Skapa en supportbiljett för att begära storleksändringar av monteringen /dev/shm.
  • Justera egenskapen cleanup_percentage på programnivå för att begränsa den maximala fyllningsprocenten för lagringsutrymmet. Det återstående lediga minnet kan användas av andra tjänster.
    Du kan justera konfigurationen i distributionskonfigurationen under cachekonfigurationsgruppen cache/frontend/default/backend_options/cleanup_percentage.
NOTE
Det konfigurerbara alternativet cleanup_percentage introducerades i Adobe Commerce 2.4.4.

I följande kod visas en exempelkonfiguration i filen .magento.env.yaml:

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

Cachekraven kan variera beroende på projektkonfiguration och anpassad tredjepartskod. Omfånget för storleken på L2-cacheminnet gör att L2-cacheminnet kan fungera utan för många tröskelträffar.
Helst bör minnesanvändningen för L2-cache stabiliseras på en viss nivå under tröskelvärdet, för att undvika täta rensningar av lagringsutrymmet.

Du kan kontrollera hur mycket lagringsminne L2-cache används på varje nod i klustret med följande CLI-kommando och leta efter raden /dev/shm.
Användningen kan variera mellan olika noder, men den bör konvergera till samma värde.

df -h

Aktivera Redis-slavanslutning

Aktivera en Redis-slavanslutning i konfigurationsfilen .magento.env.yaml om du bara vill tillåta en nod att hantera läs- och skrivtrafik medan de andra noderna hanterar den skrivskyddade trafiken.

stage:
  deploy:
    REDIS_USE_SLAVE_CONNECTION: true

Se REDIS_USE_SLAVE_CONNECTION i Commerce on Cloud Infrastructure Guide.

För Adobe Commerce lokala installationer konfigurerar du den nya Redis-cacheimplementeringen med kommandona bin/magento:setup. Se Använd Redis för standardcache i Konfigurationshandboken.

WARNING
Konfigurera inte en Redis-slavanslutning för molninfrastrukturprojekt med en skalad/delad arkitektur. Detta orsakar Redis-anslutningsfel. Se Redis-konfigurationsvägledning i guiden Commerce om molninfrastruktur.

Förinläsningsnycklar

Om du vill återanvända data mellan sidor anger du nycklarna för förinläsning i konfigurationsfilen .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'

Lokala installationer finns i Redis-förinläsningsfunktionen i Konfigurationshandboken.

Aktivera inaktuell cache

Minska väntetiderna för lås och förbättra prestanda - särskilt när du hanterar många block- och cachenycklar - genom att använda ett föråldrat cacheminne när du genererar ett nytt cacheminne parallellt. Aktivera inaktuell cache och definiera cachetyper i konfigurationsfilen config.php (endast molnet):

'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
I det föregående exemplet är cachen full_page inte relevant för Adobe Commerce i molninfrastrukturprojekt, eftersom de använder Fast.

Information om hur du konfigurerar lokala installationer finns i Inaktuella cachealternativ i Konfigurationshandboken.

Separat Redis-cache och sessionsinstanser

Genom att separera Redis-cachen från Redis-sessionen kan du hantera cachen och sessioner oberoende av varandra. Det förhindrar att cacheproblem påverkar sessionerna, vilket kan påverka intäkterna. Varje Redis-instans körs i sin egen kärna, vilket förbättrar prestandan.

  1. Uppdatera konfigurationsfilen .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. Uppdatera konfigurationsfilen .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. Skicka en Adobe Commerce-supportanmälan för att begära etablering av en ny Redis-instans som är dedikerad till sessioner i produktions- och mellanlagringsmiljöer. Inkludera de uppdaterade konfigurationsfilerna för .magento/services.yaml och .magento.app.yaml. Detta orsakar inga driftavbrott, men en distribution krävs för att aktivera den nya tjänsten.

  4. Kontrollera att den nya instansen körs och notera portnumret.

    code language-bash
    echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
    
  5. Lägg till portnumret i konfigurationsfilen .magento.env.yaml.

    note important
    IMPORTANT
    Konfigurera endast Redis-sessionsporten om ece-tools inte kan identifiera den automatiskt från definitionen för Redis-sessionstjänsten i MAGENTO_CLOUD_RELATIONSHIPS.
    note note
    NOTE
    disable_locking måste anges till 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. Ta bort sessioner från standarddatabasen (db 0) i Redis-cacheinstansen.

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

Under distributionen bör du se följande rader i bygg- och distributionsloggen:

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

Cachekomprimering

Om du använder mer än 6 GB Redis maxmemory kan du använda cachekomprimering för att minska utrymmet som nycklarna förbrukar. Tänk på att det finns en kompromiss med prestanda på klientsidan. Om du har en ledig processor aktiverar du den. Se Använd Redis för sessionslagring i Konfigurationshandboken.

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

Aktivera asynkron Redis-frigivning (lazyfree)

Om du vill aktivera lazyfree på Adobe Commerce i molninfrastrukturen skickar du en Adobe Commerce Support-biljett med en begäran om att följande Redis-konfiguration ska användas på din eller dina miljöer:

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

När lazyfree är aktiverat avlastar Redis minnesåtergivningen till bakgrundstrådar för borttagningar, förfallotider, serverinitierade borttagningar, användarborttagningar och tömningar av replikdatauppsättningar. Detta minskar blockeringen av huvudtråden och kan minska fördröjningen för förfrågningar.

NOTE
Alternativet lazyfree-lazy-user-del yes gör att kommandot DEL beter sig som UNLINK, som omedelbart bryter länken till tangenterna och frigör deras minne asynkront.
WARNING
Eftersom frigöring sker i bakgrunden, kommer minne som används av borttagna/utgångna/vräknade tangenter att allokeras tills bakgrundstrådarna slutför arbetet. Om Redis redan har ett starkt minnestryck bör du testa försiktigt och överväga att minska minnestrycket först (till exempel inaktivera blockcache för specifika fall och separera cache- och sessionsinstanser från Redis enligt beskrivningen ovan).

Aktivera Redis-flertrådig I/O

Om du vill aktivera Redis I/O-trådning på Adobe Commerce i molninfrastrukturen skickar du en Adobe Commerce Support-biljett med en begäran om konfigurationen nedan. Detta kan förbättra genomströmningen genom att avlasta socketläsningar/-skrivningar och kommandoparsning från huvudtråden, till priset av högre CPU-användning. Validera under inläsning och övervaka dina värdar.

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-trådar fungerar parallellt med klientens I/O och endast parsing. Redis-kommandokörning förblir entrådad.
WARNING
Att aktivera I/O-trådar kan öka CPU användning och är inte till någon nytta för alla arbetsbelastningar. Börja med ett konservativt värde och ett riktmärke. Om fördröjningen ökar eller CPU mättas minskar du io-threads eller inaktiverar läsningar i I/O-trådar.

Öka tidsåtgången och antalet försök för Redis-klienten

Öka cacheklientens tolerans mot övergående mättnad genom att justera backend-alternativen i .magento.env.yaml:

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

De här inställningarna ökar klienttoleransen för överbelastning på Redis genom att förlänga svarstidsfönstret och försöka ansluta igen. Detta kan minska intermittenta cannot connect to localhost:6370- och lästimeoutfel under korta toppar.

NOTE
De är inte en korrigering för beständig överlagring.

Ytterligare information

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