Magento utiliza diversos tipos de caché de datos para mejorar los tiempos de procesamiento y respuesta, facilitando también la creación de cachés personalizadas para optimizar nuestros desarrollos, obteniendo una mayor velocidad de carga y una mejor experiencia de usuario.
Cómo funciona la caché de Magento
Magento cuenta con diferentes tipos de caché predeterminadas (configuraciones, layouts, bloques, html, etc.) pensadas para mejorar el rendimiento del sistema y la velocidad de carga.
El objetivo de estas cachés consiste en almacenar los datos costosos de obtener. De modo que, cuando se vuelvan a utilizar, puedan obtenerse de modo eficiente desde estas cachés, sin necesidad de calcularse de nuevo.
Las cachés disponibles pueden consultarse y gestionarse desde el administrador de Magento (System > Tools > Cache Management) o desde los comandos disponibles:
Consultar estado de cachés disponibles
bin/magento cache:status
Limpiar caché:
- Si no se indican cachés específicas, se limpiaran todas.
bin/magento cache:clean
bin/magento cache:flush
Habilitar/deshabilitar caché:
- Si no se indican cachés específicas, se habilitarán/deshabilitarán todas.
bin/magento cache:enable
bin/magento cache:disable
Crear caché personalizada
Magento facilita la ampliación de su sistema de caché de datos, incluyendo nuevos tipos de caché. De este modo, si trabajamos con tareas que utilizan datos costosos de obtener, podemos desarrollar una nueva caché que permita trabajar de forma eficiente con esta información.
1. Crear fichero <Módulo>/etc/cache.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Cache/etc/cache.xsd">
<type name="mi-cache" translate="label,description" instance="MiVendor\MiModulo\Model\Cache\Type">
<label>Mi cache</label>
<description>Mi cache personalizada</description>
</type>
</config>
2. Crear clase <Módulo>/Model/Cache/Type.php
<?php
namespace MiVendor\MiModulo\Model\Cache;
use Magento\Framework\App\CacheInterface;
use Magento\Framework\Serialize\SerializerInterface;
use Magento\Framework\App\Cache\Type\FrontendPool;
class Type extends \Magento\Framework\Cache\Frontend\Decorator\TagScope
{
public const TYPE_IDENTIFIER = 'mi-cache';
public const CACHE_TAG = 'MI-CACHE';
public const CACHE_EXPIRATION = 86400;
private CacheInterface $cache;
private SerializerInterface $serializer;
public function __construct(
CacheInterface $cache,
SerializerInterface $serializer,
FrontendPool $cacheFrontendPool
){
$this->cache = $cache;
$this->serializer = $serializer;
parent::__construct(
$cacheFrontendPool->get(self::TYPE_IDENTIFIER), self::CACHE_TAG
);
}
public function read(string $key): array
{
return $this->serializer->unserialize($this->cache->load($key));
}
public function write(string $key, array $data): void
{
$this->cache->save(
$this->serializer->serialize($data),
$key,
[self::CACHE_TAG],
self::CACHE_EXPIRATION
);
}
}
3. Habilitar y utilizar la nueva caché personalizada
Una vez creados los ficheros anteriores y lanzar un bin/magento setup:upgrade, el nuevo tipo de caché personalizada será listada desde el propio administrador de Magento, donde podremos habilitarla:
Tras habilitar la caché, podremos leer y escribir datos a través de las funciones implementadas:
- Leer datos: \MiVendor\MiModulo\Model\Cache::read()
- Escribir datos: \MiVendor\MiModulo\Model\Cache::write()
Al superar el tiempo de expiración definido (en este caso: 86400 segundos = 1 día), los datos cacheados quedarán invalidados y deberán volverse a obtener y almacenar.
Otras formas de mejorar el rendimiento
Crear una caché de datos personalizada puede mejorar notablemente el rendimiento de nuestro sistema Magento. Pero existen otras técnicas para optimizar nuestros procesos y agilizar el sistema, como crear indexadores de datos personalizados:
CREAR INDEXADOR PERSONALIZADO EN MAGENTO
Los indexadores permiten mejorar el rendimiento de un sistema Magento mediante el preprocesamiento de los datos más costosos de obtener. De modo que cuando el sistema necesite consumir esta información, ya se encontrará disponible en una estructura de datos óptima y eficiente.