L2-cachekonfiguration för prestandaoptimering

L2-cachelagring (på två nivåer) minskar nätverkstrafiken mellan fjärrcachelagringen (Redis eller Valkey) och Commerce-programmet genom att lägga till ett lokalt cachelager på varje webbnod. En standardinstans i Commerce överför cirka 300 kB per begäran, och trafiken kan snabbt öka till över 1 000 förfrågningar i vissa situationer.

Med L2-cachning lagrar varje webbnod data som du använder ofta lokalt och använder fjärrcachen i två syften:

  • Kontrollera cachedataversionen för att säkerställa att den senaste cachen lagras lokalt
  • Överför uppdaterade cachedata från fjärrarkivet till den lokala datorn

Commerce lagrar den hash-kodade dataversionen i fjärrcachen, med suffixet :hash som tillägg till den vanliga nyckeln. När det lokala cacheminnet är inaktuellt hämtas data från fjärrdatorn via ett cachekort.

Det finns två L2-cacheimplementeringar:

Implementering
Version
Beskrivning
Äldre (RemoteSynchronizedCache)
2.4.x
Zend-baserad cache på två nivåer med Cm_Cache_Backend_File för lokal lagring
Modern (symfony_l2)
2.4.9+
Symfonisk cachebaserad L2 med PSR-6-kompatibilitet och förbättrade prestanda
INFO
För Adobe Commerce i molninfrastruktur kan du använda distribuera variabler för L2-cachekonfiguration.

Äldre L2-cachekonfiguration (RemoteSynchronizedCache)

Använd följande exempel för att ändra eller ersätta det befintliga cacheavsnittet i filen app/etc/env.php.

'cache' => [
    'frontend' => [
        'default' => [
            'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
            'backend_options' => [
                'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
                'remote_backend_options' => [
                    'persistent' => 0,
                    'server' => 'localhost',
                    'database' => '0',
                    'port' => '6379',
                    'password' => '',
                    'compress_data' => '1',
                ],
                'local_backend' => 'Cm_Cache_Backend_File',
                'local_backend_options' => [
                    'cache_dir' => '/dev/shm/'
                ]
            ],
            'frontend_options' => [
                'write_control' => false,
            ],
        ]
    ],
    'type' => [
        'default' => ['frontend' => 'default'],
    ],
],

Var:

  • backend är L2-cacheimplementeringen.

  • backend_options är L2-cachekonfigurationen.

    • remote_backend är fjärrexplementeringen av cache: Redis eller MySQL.
    • remote_backend_options är fjärrcachekonfigurationen.
    • local_backend är den lokala cacheimplementeringen: Cm_Cache_Backend_File
    • local_backend_options är den lokala cachekonfigurationen.
    • cache_dir är ett filcachespecifikt alternativ för den katalog där det lokala cacheminnet lagras.

Adobe rekommenderar att du använder Redis för fjärrcachelagring (\Magento\Framework\Cache\Backend\Redis) och Cm_Cache_Backend_File för lokal cachelagring av data i delat minne med: 'local_backend_options' => ['cache_dir' => '/dev/shm/']

Adobe rekommenderar att du använder funktionen cache preload eftersom den drastiskt minskar trycket på Redis. Glöm inte att lägga till suffixet :hash för förinläsningsnycklar.

Alternativ för inaktuell cache

Från och med Commerce 2.4 kan alternativet use_stale_cache förbättra prestandan i vissa fall genom att servera tidigare cachelagrade data medan nya cachedata genereras i en parallell process.

I allmänhet accepteras en kompromiss med låsväntetider ur ett prestandaperspektiv. När antalet block eller cacheposter ökar, tar det längre tid att låsa. I vissa scenarier kan väntan vara upp till antalet nycklar för processen x timeout för sökning. I sällsynta fall kan en handlare ha hundratals nycklar i cachen Block/Config, så även en liten timeout för en låsning kan kosta sekunder.

IMPORTANT
Inaktuell cache fungerar bara med L2-cache. Om du vill aktivera det lägger du till 'use_stale_cache' => true i konfigurationen på den översta nivån för L2-cachefrontend.

Adobe rekommenderar att du bara aktiverar alternativet use_stale_cache för de cachetyper som drar störst nytta av det, bland annat:

  • block_html
  • config_integration_api
  • config_integration
  • full_page
  • layout
  • reflection
  • translate

Adobe rekommenderar inte att du aktiverar alternativet use_stale_cache för cachetypen default.

I följande kod visas en exempelkonfiguration:

'cache' => [
    'frontend' => [
        'default' => [
            'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
            'backend_options' => [
                'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
                'remote_backend_options' => [
                    'persistent' => 0,
                    'server' => 'localhost',
                    'database' => '0',
                    'port' => '6379',
                    'password' => '',
                    'compress_data' => '1',
                ],
                'local_backend' => 'Cm_Cache_Backend_File',
                'local_backend_options' => [
                    'cache_dir' => '/dev/shm/'
                ]
            ],
            'frontend_options' => [
                'write_control' => false,
            ],
        ],
         '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' => '0',
                    'port' => '6379',
                    'password' => '',
                    'compress_data' => '1',
                ],
                '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']
    ],
],

Modern Symfony L2-cacheimplementering

[2.4.9-beta]{class="badge negative" title="Finns endast i 2.4.9-beta."}

Från och med Commerce 2.4.9 kan du använda den Symfony Cache-baserade L2-cacheimplementeringen (symfony_l2 backend) som tillhandahåller en modern, PSR-6-kompatibel cacheimplementering med betydande prestandaförbättringar jämfört med traditionell RemoteSynchronizedCache.

Fördelar med Symfony L2-cache

  • Modern arkitektur: Byggt på komponenter för Symfony Cache (PSR-6-kompatibel)
  • Bättre prestanda: Inbyggt stöd för Ibinary-serialisering, GZIP-komprimering och Lua-skript
  • Beständiga anslutningar: Minskar Redis- eller Valkey-anslutningens overhead med anslutningspoolning
  • Förinläsningsnycklar: Stöder förinläsning av cachenyckel för viktiga data
  • Stöd för inaktuell cache: Fullständig kompatibilitet med alternativet use_stale_cache
  • Förenklad konfiguration: Renare namn på backend-typ (redis, valkey, file)

Konfigurationsexempel med Symfony L2-cache

Använd den förenklade backend-typen symfony_l2 för L2-cache:

'cache' => [
    'frontend' => [
        'default' => [
            'backend' => 'symfony_l2',
            'backend_options' => [
                // L2 (Remote): Redis with Symfony Cache
                'remote_backend' => 'redis',
                'remote_backend_options' => [
                    'server' => 'localhost',
                    'database' => '0',
                    'port' => '6379',
                    'password' => '',
                    'serializer' => 'igbinary',
                    'compression_lib' => 'gzip',
                    'persistent_id' => 'magento_l2_default',
                    'timeout' => '2.5',
                    'read_timeout' => '2.0',
                    'use_lua' => '1',
                    'preload_keys' => [
                        'prefix_EAV_ENTITY_TYPES:hash',
                        'prefix_GLOBAL_PLUGIN_LIST:hash',
                        'prefix_DB_IS_UP_TO_DATE:hash',
                        'prefix_SYSTEM_DEFAULT:hash',
                    ],
                ],
                // L1 (Local): File cache
                'local_backend' => 'file',
                'local_backend_options' => [
                    'cache_dir' => '/dev/shm/magento_l1'
                ],
                'cleanup_percentage' => 90,
            ],
        ]
    ],
    'type' => [
        'default' => ['frontend' => 'default'],
    ],
],

Symfonisk L2-cache med inaktuell cache

Konfigurera separata klientgrupper för stöd för inaktuell cache:

'cache' => [
    'frontend' => [
        // Default frontend: NO stale cache
        'default' => [
            'backend' => 'symfony_l2',
            'backend_options' => [
                'remote_backend' => 'redis',
                'remote_backend_options' => [
                    'server' => 'localhost',
                    'database' => '0',
                    'port' => '6379',
                    'serializer' => 'igbinary',
                    'compression_lib' => 'gzip',
                    'persistent_id' => 'magento_l2_default',
                ],
                'local_backend' => 'file',
                'local_backend_options' => [
                    'cache_dir' => '/dev/shm/magento_l1'
                ],
            ],
        ],
        // Stale cache enabled frontend
        'stale_cache_enabled' => [
            'backend' => 'symfony_l2',
            'backend_options' => [
                'remote_backend' => 'redis',
                'remote_backend_options' => [
                    'server' => 'localhost',
                    'database' => '0',
                    'port' => '6379',
                    'serializer' => 'igbinary',
                    'compression_lib' => 'gzip',
                    'persistent_id' => 'magento_l2_stale',
                ],
                'local_backend' => 'file',
                'local_backend_options' => [
                    'cache_dir' => '/dev/shm/magento_l1_stale'
                ],
                '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'],
    ],
],

Serverdelsalternativ för Symfony L2-cache

Alternativ
Typ
Standard
Beskrivning
remote_backend
string
'redis'
Fjärrserverdelstyp: redis, valkey eller file
remote_backend_options
array
[]
Fjärrkonfiguration för backend (se Redis/Valkey-dokumentationen)
local_backend
string
'file'
Lokal serverdelstyp: file eller apcu
local_backend_options
array
[]
Lokal serverdelskonfiguration
cleanup_percentage
heltal
90
Tröskelvärde för rensning av L1-cache (1-100)
use_stale_cache
boolesk
false
Aktivera inaktuell cache för hög tillgänglighet

Stöd för Valkey

symfony_l2-serverdelen stöder även Valkey som fjärrserverdel:

'backend_options' => [
    'remote_backend' => 'valkey',  // Use Valkey instead of Redis
    'remote_backend_options' => [
        'server' => 'localhost',
        'database' => '0',
        'port' => '6379',
        'serializer' => 'igbinary',
        'compression_lib' => 'gzip',
    ],
    // ... rest of configuration
]

Detaljerade konfigurationsalternativ finns i:

recommendation-more-help
commerce-operations-help-configuration