[En las instalaciones]{class="badge informative" title="Solo se aplica a los proyectos locales de Adobe Commerce."}

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:

Implementación
Versión
Descripción
Heredado (RemoteSynchronizedCache)
<2.4.9
Caché de dos niveles basada en Zend con Cm_Cache_Backend_File para almacenamiento local
Moderno (symfony_l2)
2.4.9+
L2 basado en caché Symfony con compatibilidad con PSR-6 y rendimiento mejorado. Solo admite Valkey.

Configuración de caché L2 heredada (RemoteSynchronizedCache)

NOTE
Las instrucciones de configuración de caché L2 heredada se aplican a versiones anteriores de Adobe Commerce. Si usa la versión 2.4.9 o posterior de Adobe Commerce, use Valkey con Symfony 2 para la caché L2.

Las instrucciones de configuración de la caché dependen del tipo de implementación:

  • Para Adobe Commerce en la nube, configure la caché L2 estableciendo la variable de implementación REDIS_BACKEND o VALKEY_BACKEND en .magento.env.yaml. Consulte Configurar la caché L2 para ver ejemplos de configuración.

  • Para las versiones locales de Adobe Commerce compatibles con Redis, use 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:

  • backend es la implementación de caché L2.

  • backend_options es la configuración de caché L2.

    • remote_backend es la implementación de caché remota: Redis o MySQL.
    • remote_backend_options es la configuración de caché remota.
    • local_backend es la implementación de caché local: Cm_Cache_Backend_File
    • local_backend_options es la configuración de caché local.
    • cache_dir es una opción específica de la caché de archivos para el directorio donde se almacena la caché local.

Para Adobe Commerce, 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.

IMPORTANT
La caché antigua solo funciona con la caché L2. Para habilitarlo, agregue '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_html
  • config_integration_api
  • config_integration
  • full_page
  • layout
  • reflection
  • translate

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

En las versiones de Commerce 2.4.9 o posterior, utilice la implementación de caché L2 basada en caché de Symfony (symfony_l2 backend) en lugar de la caché L2 heredada. La caché Symfony L2 proporciona una implementación de almacenamiento en caché moderna compatible con PSR-6 con mejoras de rendimiento significativas con respecto a la versión tradicional de RemoteSynchronizedCache.

IMPORTANT
La caché de Redis no es compatible con Adobe Commerce 2.4.9 o con versiones de parches posteriores a las 2.4.5-p16, 2.4.6-p14, 2.4.7-p9 y 2.4.8-p5. Si está actualizando a una versión que no admite Redis, debe configurar Valkey y actualizar la configuración de la caché para que utilice symfony_l2. Para Commerce local, consulte configurar Valkey. Para Commerce en la nube, consulte Configurar Valkey
Redis no es un servidor remoto compatible oficialmente para symfony_l2. Si su versión es compatible con symfony_l2, debe usar Valkey para el almacenamiento en caché. Consulte Requisitos del sistema para

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 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 (valkey, file)

Ejemplo de configuración con caché Symfony L2

NOTE
Para Adobe Commerce en la nube, el paquete de herramientas ECE (ece-tools) administra la configuración de la caché automáticamente. No edite app/etc/env.php directamente: la implementación sobrescribe los cambios manuales. Para la configuración en la nube, consulta Configurar la caché de Symfony L2 en su lugar.

Usar el tipo de servidor symfony_l2 simplificado para la caché L2:

'cache' => [
    'frontend' => [
        'default' => [
            'backend' => 'symfony_l2',
            'backend_options' => [
                // L2 (Remote): Valkey with Symfony Cache
                'remote_backend' => 'valkey',
                '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' => 'valkey',
                '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' => 'valkey',
                '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

Opción
Tipo
Predeterminado
Descripción
remote_backend
cadena
'valkey'
Tipo de servidor remoto: valkey o file. Usar valkey para la caché L2.
remote_backend_options
matriz
[]
Configuración remota del servidor (consulte la documentación de Valkey)
local_backend
cadena
'file'
Tipo de servidor local: file o apcu
local_backend_options
matriz
[]
Configuración del servidor local
cleanup_percentage
entero
95
Umbral de limpieza de caché L1 (1-100)
use_stale_cache
booleano
false
Habilitar caché anticuada para alta disponibilidad
NOTE
La opción remote_backend también acepta un valor de redis. Sin embargo, Redis no es un servicio de caché admitido oficialmente para Adobe Commerce 2.4.9 y versiones posteriores. Adobe recomienda configurar symfony_l2 solo con valkey. Consulte Requisitos del sistema para ver los servicios de caché admitidos por versión.

Rendimiento y fiabilidad mejorados de la caché Symfony L2

NOTE
Estas mejoras se aplican a las implementaciones de Adobe Commerce 2.4.9 que utilizan symfony_l2 y están disponibles con el parche ACP2E-5132. Consulte Parches de nube para Commerce para ver las últimas notas de la versión de los parches.

Las actualizaciones más recientes mejoran la escalabilidad de la caché de Symfony L2, reducen la E/S innecesaria del sistema de archivos y mejoran la consistencia y fiabilidad de la caché.

Almacenamiento de etiquetas de caché de Symfony L2 optimizado

Se ha optimizado el comportamiento de la caché de Symfony L2 para implementaciones respaldadas por Valkey al eliminar escrituras redundantes de índices de etiquetas de sistemas de archivos. Las etiquetas de caché ahora se almacenan exclusivamente en Valkey, alineando el comportamiento de la caché de Symfony L2 con la implementación de la caché heredada. Esto reduce la E/S de disco innecesaria, mejora el rendimiento de escritura en caché y evita el crecimiento del directorio var/cache/symfony/tags/.

Comportamiento de caché basado en archivos mejorado

Para implementaciones que utilizan la caché basada en archivos (sin Valkey), el índice de etiquetas local se sigue manteniendo para admitir la invalidación de la caché. El índice de etiquetas ahora se escribe en la ubicación cache_dir configurada en lugar de en la ubicación var/cache codificada anteriormente, lo que garantiza un uso coherente del directorio de caché y una compatibilidad mejorada con las configuraciones de caché personalizadas.

Se corrigieron pertenencias de etiquetas obsoletas después de volver a etiquetar

Si se reetiqueta una entrada de caché, podría dejarla asociada a etiquetas a las que ya no pertenecía. Las suscripciones a etiquetas antiguas ahora se borran al volver a etiquetar, por lo que las entradas de la caché solo se invalidan con las etiquetas asignadas actualmente a ellas.

Se corrigió la escritura remota redundante al guardar sin modificar

Al guardar una entrada de caché con contenido no modificado, se sigue activando una escritura en el backend remoto (Valkey). Las operaciones de guardado ahora se omiten cuando el contenido no se modifica, lo que reduce las escrituras remotas innecesarias.

Desalojo fijo basado en tamaño L1 (cleanup_percentage)

El umbral cleanup_percentage utilizado para la expulsión basada en el tamaño L1 no almacenaba en déclencheur la limpieza de forma coherente. La expulsión de caché de L1 ahora respeta correctamente la configuración de cleanup_percentage.

Se ha añadido el bloqueo de regeneración para caché anticuada

Cuando use_stale_cache está habilitado y la copia remota de una entrada no está disponible temporalmente, solo un proceso adquiere ahora un bloqueo de corta duración para regenerar esa entrada. Otras solicitudes simultáneas para la misma entrada siguen sirviendo al valor local existente en lugar de regenerarlo ellas mismas, reduciendo las estampidas de regeneración y la carga redundante del servidor.

Impacto

  • Elimina las escrituras redundantes del índice de etiquetas del sistema de archivos para las implementaciones de caché Symfony L2 respaldadas por Valkey, lo que reduce la E/S del disco y evita el crecimiento innecesario del directorio var/cache/symfony/tags/.
  • Garantiza que las implementaciones de caché basadas en archivos utilicen de forma coherente el cache_dir configurado para el índice de etiqueta local y, al mismo tiempo, conserva el comportamiento de invalidación de la caché.
  • Evita la invalidación de caché incorrecta causada por pertenencias de etiquetas obsoletas dejadas atrás después del reetiquetado.
  • Reduce las escrituras remotas innecesarias para guardar la caché sin modificar, lo que reduce la carga de red y back-end.
  • Garantiza que los déclencheur de desalojo de caché L1 se ajusten de forma fiable al umbral cleanup_percentage configurado.
  • Reduce las estampidas de regeneración de las entradas de use_stale_cache al seleccionar un solo regenerador por clave en lugar de volver a crearla en cada solicitud simultánea.

Para ver las opciones de configuración detalladas, consulte:

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