Best practice per la configurazione del servizio Redis

  • Configura cache L2 Redis
  • Abilita connessione slave Redis
  • Precarica chiavi
  • Abilita cache non aggiornata
  • Separare la cache Redis dalla sessione Redis
  • Comprimi la cache Redis e utilizza gzip per una compressione più elevata

Configura cache L2 Redis

Configurare la cache di Redis L2 impostando la variabile di distribuzione REDIS_BACKEND nel file di configurazione .magento.env.yaml.

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

Per la configurazione dell'ambiente nell'infrastruttura cloud, vedere REDIS_BACKEND nella Guida all'infrastruttura cloud di Commerce.

Per le installazioni locali, vedere Configure Redis page caching nella Guida alla configurazione.

NOTE
Verificare di utilizzare la versione più recente del pacchetto ece-tools. In caso contrario, aggiorna alla versione più recente. È possibile controllare la versione installata nell'ambiente locale utilizzando il comando CLI composer show magento/ece-tools.

Dimensioni memoria cache L2 (Adobe Commerce Cloud)

La cache L2 utilizza un file system temporaneo come meccanismo di archiviazione. Rispetto ai sistemi di database specializzati con valori chiave, un file system temporaneo non dispone di criteri di rimozione delle chiavi per controllare l'utilizzo della memoria.

La mancanza di controllo dell'utilizzo della memoria può causare un aumento nel tempo dell'utilizzo della memoria cache L2 accumulando la cache non aggiornata.

Per evitare l’esaurimento della memoria per le implementazioni della cache L2, Adobe Commerce cancella l’archiviazione quando viene raggiunta una determinata soglia. Il valore di soglia predefinito è 95%.

È importante regolare l’utilizzo massimo della memoria cache L2 in base ai requisiti del progetto per lo storage della cache. Utilizzare uno dei metodi seguenti per configurare il dimensionamento della cache di memoria:

  • Creare un ticket di supporto per richiedere modifiche alle dimensioni del mount /dev/shm.
  • Regolare la proprietà cleanup_percentage a livello di applicazione per limitare la percentuale di riempimento massima dell'archiviazione. La memoria disponibile rimanente può essere utilizzata da altri servizi.
    È possibile modificare la configurazione nella configurazione di distribuzione nel gruppo di configurazione della cache cache/frontend/default/backend_options/cleanup_percentage.
NOTE
L'opzione configurabile cleanup_percentage è stata introdotta in Adobe Commerce 2.4.4.

Il codice seguente mostra un esempio di configurazione nel file .magento.env.yaml:

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

I requisiti della cache possono variare in base alla configurazione del progetto e al codice personalizzato di terze parti. L'ambito del dimensionamento della memoria cache L2 consente alla cache L2 di funzionare senza troppi hit di soglia.
Idealmente, l'utilizzo della memoria cache L2 dovrebbe stabilizzarsi a un certo livello al di sotto della soglia, proprio per evitare frequenti cancellazioni di memoria.

È possibile verificare l'utilizzo della memoria di archiviazione nella cache L2 in ogni nodo del cluster utilizzando il seguente comando CLI e cercando la riga /dev/shm.
L’utilizzo può variare tra nodi diversi, ma deve convergere allo stesso valore.

df -h

Abilita connessione slave Redis

Abilitare una connessione slave Redis nel file di configurazione .magento.env.yaml per consentire a un solo nodo di gestire il traffico di lettura/scrittura mentre gli altri nodi gestiscono il traffico di sola lettura.

stage:
  deploy:
    REDIS_USE_SLAVE_CONNECTION: true

Vedi REDIS_USE_SLAVE_CONNECTION nella Guida di Commerce sull'infrastruttura cloud.

Per le installazioni Adobe Commerce locali, configurare la nuova implementazione della cache Redis utilizzando i comandi bin/magento:setup. Vedere Utilizzare Redis per la cache predefinita nella Guida alla configurazione.

WARNING
non configurare una connessione slave Redis per i progetti di infrastruttura cloud con architettura scalata/divisa. Questo causa errori di connessione Redis. Consulta la guida alla configurazione Redis nella guida Commerce on Cloud Infrastructure.

Precarica chiavi

Per riutilizzare i dati tra pagine, elencare le chiavi per il precaricamento nel file di configurazione .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'

Per le installazioni locali, vedere Funzionalità di precaricamento Redis nella Guida alla configurazione.

Abilita cache non aggiornata

Riduci i tempi di attesa di blocco e migliora le prestazioni, soprattutto quando si tratta di numerosi blocchi e chiavi di cache, utilizzando una cache obsoleta durante la generazione in parallelo di una nuova cache. Abilitare la cache non aggiornata e definire i tipi di cache nel file di configurazione .magento.env.yaml:

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
    CACHE_CONFIGURATION:
      _merge: true
      default:
        backend_options:
          use_stale_cache: false
      stale_cache_enabled:
        backend_options:
          use_stale_cache: true
      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
Nell'esempio precedente, la cache full_page non è rilevante per i progetti di infrastruttura cloud di Adobe Commerce, perché utilizza Fastly.

Per la configurazione delle installazioni locali, vedere Opzioni cache non aggiornate nella Guida alla configurazione.

Cache Redis e istanze di sessione separate

La separazione della cache Redis dalla sessione Redis consente di gestire la cache e le sessioni in modo indipendente. Evita che i problemi di cache influiscano sulle sessioni, il che potrebbe influire sui ricavi. Ogni istanza Redis viene eseguita sul proprio core, migliorando le prestazioni.

  1. Aggiornare il file di configurazione .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. Aggiornare il file di configurazione .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. Invia un ticket di supporto Adobe Commerce per richiedere il provisioning di una nuova istanza Redis dedicata alle sessioni negli ambienti di produzione e staging. Includere i file di configurazione .magento/services.yaml e .magento.app.yaml aggiornati. Questo non causerà tempi di inattività, ma richiede una distribuzione per attivare il nuovo servizio.

  4. Verifica che la nuova istanza sia in esecuzione e annota il numero di porta.

    code language-bash
    echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
    
  5. Aggiungere il numero di porta al file di configurazione .magento.env.yaml.

    note note
    NOTE
    disable_locking deve essere impostato su 1.
    code language-yaml
    SESSION_CONFIGURATION:
      _merge: true
      redis:
        port: 6374       # check the port in $MAGENTO_CLOUD_RELATIONSHIPS
        timeout: 5
        disable_locking: 1
        bot_first_lifetime: 60
        bot_lifetime: 7200
        max_lifetime: 2592000
        min_lifetime: 60
    
  6. Rimuovere le sessioni dal database predefinito (db 0) nell'istanza della cache Redis.

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

Durante la distribuzione, nel registro build e distribuzione dovrebbero essere visualizzate le righe seguenti:

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

Compressione cache

Se si utilizzano più di 6 GB di Redis maxmemory, è possibile utilizzare la compressione della cache per ridurre lo spazio utilizzato dalle chiavi. Tieni presente che esiste un compromesso con le prestazioni lato client. Se si dispone di CPU di riserva, attivarle. Vedere Utilizzare Redis per l'archiviazione della sessione nella Guida alla configurazione.

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

Informazioni aggiuntive

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