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:
Cm_Cache_Backend_File för lokal lagringÄ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_Filelocal_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.
'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_htmlconfig_integration_apiconfig_integrationfull_pagelayoutreflectiontranslate
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
remote_backend'redis'redis, valkey eller fileremote_backend_options[]local_backend'file'file eller apculocal_backend_options[]cleanup_percentage90use_stale_cachefalseStö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: