Configuración de caché L2 para la optimización del rendimiento
El almacenamiento en caché L2 (de dos niveles) reduce el tráfico de red entre el almacenamiento de caché remoto (Redis o Valkey) y la aplicación de Commerce al agregar una capa de caché local en cada nodo web. Una instancia estándar de Commerce transfiere unos 300 KB por solicitud y el tráfico puede aumentar rápidamente a más de 1000 solicitudes en algunas situaciones.
Con el almacenamiento en caché L2, cada nodo web almacena localmente los datos a los que se accede con frecuencia y utiliza la caché remota para dos fines:
- Comprobación de la versión de los datos de la caché para asegurarse de que la caché más reciente se almacena localmente
- Transferir datos de caché actualizados del almacén remoto al equipo local
Commerce almacena la versión de los datos con hash en la caché remota, con el sufijo :hash anexado a la clave normal. Cuando la caché local está obsoleta, los datos se recuperan del equipo remoto a través de un adaptador de caché.
Hay dos implementaciones de caché L2 disponibles:
Cm_Cache_Backend_File para almacenamiento localConfiguración de caché L2 heredada (RemoteSynchronizedCache)
Utilice el siguiente ejemplo para modificar o reemplazar la sección de caché existente en el archivo 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'],
],
],
Donde:
-
backendes la implementación de caché L2. -
backend_optionses la configuración de caché L2.remote_backendes la implementación de caché remota: Redis o MySQL.remote_backend_optionses la configuración de caché remota.local_backendes la implementación de caché local:Cm_Cache_Backend_Filelocal_backend_optionses la configuración de caché local.cache_dires una opción específica de la caché de archivos para el directorio donde se almacena la caché local.
Adobe recomienda usar Redis para el almacenamiento remoto en caché (\Magento\Framework\Cache\Backend\Redis) y Cm_Cache_Backend_File para el almacenamiento local en caché de datos en la memoria compartida, con: 'local_backend_options' => ['cache_dir' => '/dev/shm/']
Adobe recomienda el uso de la característica cache preload, ya que reduce drásticamente la presión sobre Redis. No olvide agregar el sufijo ‘:hash’ para las claves de precarga.
Opciones de caché antiguas
A partir de Commerce 2.4, la opción use_stale_cache puede mejorar el rendimiento en casos específicos al ofrecer datos almacenados en caché anteriormente mientras se generan nuevos datos de caché en un proceso paralelo.
Por lo general, el equilibrio con la espera de bloqueo es aceptable desde el punto de vista del rendimiento. Sin embargo, a medida que aumenta el número de bloques o entradas de caché, las esperas de bloqueo tardan más. En algunos casos, la espera puede ser de hasta el número de claves x tiempo de espera de búsqueda para el proceso. En casos excepcionales, un comerciante puede tener cientos de claves en la caché de Block/Config, por lo que incluso un pequeño tiempo de espera de búsqueda para un bloqueo puede costar segundos.
'use_stale_cache' => true a la configuración de nivel superior del front-end de caché L2.Adobe recomienda habilitar la opción use_stale_cache solo para los tipos de caché que más se benefician de ella, incluidos:
block_htmlconfig_integration_apiconfig_integrationfull_pagelayoutreflectiontranslate
Adobe no recomienda habilitar la opción use_stale_cache para el tipo de caché default.
El siguiente código muestra un ejemplo de configuración:
'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']
],
],
Implementación moderna de la caché Symfony L2
[2.4.9-beta]{class="badge negative" title="Disponible solo en la versión beta 2.4.9."}
A partir de Commerce 2.4.9, puede utilizar la implementación de caché L2 basada en Symfony Cache (symfony_l2 backend) que proporciona una implementación de almacenamiento en caché moderna compatible con PSR-6 con mejoras significativas de rendimiento con respecto a la implementación tradicional de RemoteSynchronizedCache.
Ventajas de la caché Symfony L2
- Arquitectura moderna: creada en los componentes de la caché Symfony (compatible con PSR-6)
- Mejor rendimiento: Compatibilidad nativa con serialización Igbinary, compresión gzip y scripts Lua
- Conexiones persistentes: reduce la sobrecarga de conexión de Redis o Valkey con la agrupación de conexiones
- Claves de precarga: admite la precarga de claves de caché para datos críticos
- Compatibilidad con caché obsoleta: Compatibilidad total con la opción
use_stale_cache - Configuración simplificada: nombres de tipo de servidor más limpios (
redis,valkey,file)
Ejemplo de configuración con caché Symfony L2
Usar el tipo de servidor symfony_l2 simplificado para la caché L2:
'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'],
],
],
Caché Symfony L2 con caché obsoleta
Configure front-end independientes para admitir caché obsoleta:
'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'],
],
],
Opciones de servidor para la caché de Symfony L2
remote_backend'redis'redis, valkey o fileremote_backend_options[]local_backend'file'file o apculocal_backend_options[]cleanup_percentage90use_stale_cachefalseAsistencia de Valkey
El servidor symfony_l2 también admite Valkey como servidor remoto:
'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
]
Para ver las opciones de configuración detalladas, consulte: