Справочная информация
Что такое кэш?
Кэш — это высокоскоростной физический уровень хранения данных, на котором хранится подмножество данных, обычно временного характера, чтобы будущие запросы на эти данные обслуживались быстрее, чем при обращении к основному месту хранения данных. Кэширование позволяет эффективно повторно использовать ранее полученные или вычисленные данные.
Данные в кэше обычно хранятся в аппаратных средствах с быстрым доступом, таких как память с произвольным доступом (RAM), а также могут использоваться параллельно с программным компонентом. Основная цель кэша — повысить производительность поиска данных за счет снижения необходимости обращения к более медленному базовому уровню хранения.
Каковы типы кэша в Magento?
id | Имя | Описание |
---|---|---|
config | Конфигурация | Magento собирает конфигурацию всех модулей, объединяет и сохраняет объединенный результат в кэше. Этот кэш содержит специфические для магазина настройки, хранящиеся в файловой системе и базе данных. |
макет | Макет | Компилирует страницы компоновки, т.е. компоненты компоновки всех компонентов. Этот тип кэша следует очищать после изменения файлов компоновки. |
block_html | Вывод блоков HTML | Фрагменты HTML-страницы в каждом блоке. Необходимо очистить этот тип кэша после модификации слоя представления. |
коллекции | Данные о коллекциях | Результаты запросов к базе данных. Должен очистить этот тип кэша, если пользовательский модуль использует логику, которая приводит к появлению записей в кэше, которые Magento не может очистить. |
db_ddl | DDL | Кэш для схемы базы данных. Следует очищать этот тип кэша после внесения пользовательских изменений в схему базы данных. |
скомпилированная_конфигурация | Скомпилированные конфигурации | Скомпилированная конфигурация. |
eav | Значения атрибутов сущности (EAV) | Метаданные, относящиеся к атрибутам EAV. Обычно нет необходимости очищать или освобождать этот тип кэша. |
полная_страница | Кэш страниц | Страницы, созданные с помощью HTML. Вы должны очистить этот тип кэша после изменения уровня кода, который влияет на вывод HTML. |
отражение | Отражение | Удаляет зависимость между модулем Webapi и модулем Client. |
перевести | Переводы | Кэширует переводы. |
config_integration | Настройки интеграции | Следует очищать этот тип кэша после изменения или добавления интеграций. |
config_integration_api | Настройки интеграции API | Интеграционная конфигурация API, скомпилированных из Store Integrations. |
config_webservice | Настройки веб-служб | Кэширование структуры Web API. |
уведомление_клиента | Уведомления клиентов | Временные уведомления, появляющиеся в пользовательском интерфейсе. |
Код для создания кэша
cache.xml
Этот файл должен быть расположен в папке {Vendor}{Module}{Cache.xml
.
Узел <type>
должен иметь атрибут id
, указывающий ID кэша, который будет создан, и может иметь атрибуты tranlate
(который ожидает атрибуты, которые могут быть переведены) и instance
(который является классом модели). Этот узел также может иметь два дочерних узла, узел <label>
(который будет отображаться как метка, идентифицирующая имя кэша) и узел <description>
(который будет отображать описание о кэше).
<?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="{cache_name}" translate="label,description" instance="{Vendor}{Module}ModelCache{ClassCacheName}">
<label>{Cache Label}</label>
<description>{Cache Description}</description>
</type>
</config>
Класс
Этот файл должен расширяться из файла
MagentoFrameworkCacheFrontendDecoratorTagScope
и устанавливать значения констант TYPE_IDENTIFIER
и CACHE_TAG
.
Константа TYPE_IDENTIFIER
определяет уникальный идентификатор типа кэша. Константа CACHE_TAG
определяет уникальный тег, который будет использоваться в области видимости типа кэша.
<?php
namespace {Vendor}{Module}ModelCache;
use MagentoFrameworkCacheFrontendDecoratorTagScope;
use MagentoFrameworkAppCacheTypeFrontendPool;
class {ClassCacheName} extends TagScope
{
public const TYPE_IDENTIFIER = '{cache_type_id}';
public const CACHE_TAG = '{CACHE_TYPE_TAG}';
public function __construct(
FrontendPool $cacheFrontendPool
) {
parent::__construct(
$cacheFrontendPool->get(self::TYPE_IDENTIFIER),
self::CACHE_TAG
);
}
}
Взаимодействие с объектом Cache
Создать, удалить, загрузить или выполнить какое-либо другое взаимодействие с пользовательским кэшем можно путем инстанцирования класса (который был указан в атрибуте instance
файла cache.xml
) и обращения к унаследованным методам.
<?php
namespace {Vendor}{Module}{Directory};
use {Vendor}{Module}ModelCache{ClassCacheName};
class {Class}
{
private {ClassCacheName} $customCache;
public function __construct(
{ClassCacheName} $customCache
) {
$this->customCache = $customCache;
}
public function isEnabledCache(): bool
{
return $this->customCache->isEnabled('{cache_id}');
}
public function saveCache($data)
{
...
$this->customCache->save($data, '{cache_id}');
...
}
public function loadCache()
{
...
return $this->customCache->load('{cache_id}');
}
public function cleanCache()
{
...
$this->customCache->clean('{cache_id}');
...
}
}
Чтобы узнать все возможные методы, достаточно обратиться к родительскому классу инстанцируемого класса и проверить доступные методы.
Команды
Вы можете проверить состояние каждого кэша с помощью следующей команды:
bin/magento cache:status
Если кэш активен, он будет отображаться со значением 1
, а если отключен - со значением 0
.
Следующая команда позволяет включить или отключить все типы кэша или только определенный кэш, если в качестве аргумента передать его ID.
# Habilitar todos os caches
bin/magento cache:enable
# Habilitar um cache específico
bin/magento cache:enable {cache_type}
# Desabilitar todos os caches
bin/magento cache:disable
# Desabilitar um cache específico
bin/magento cache:disable {cache_type}
Чтобы удалить устаревшие элементы из кэша, вы можете удалить их с помощью следующей команды:
# Limpar todos os caches que estão em uso
bin/magento cache:clean
# Limpar um cache específico que está em uso
bin/magento cache:clean {cache_type}
# Apagar todos dos dados dos caches
bin/magento cache:flush
# Apagar todos os dados de um cache específico
bin/magento cache:flush {cache_type}
Отделка
Значения между скобками (
{test}
) должны быть изменены в реализации кода.
Включение изменений
Удалите файлы, созданные при компиляции Magento, и запустите команду PHP для создания конфигурации инъекций зависимостей и всех недостающих классов, которые должны быть созданы (proxys, interceptors, etc), а также для очистки кэша всех процессов.
rm -rf var/generation/
rm -rf generated/
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento flush
Каталоги и файлы
Вот список каталогов и файлов, которые должны быть созданы.
- app/
- code/
- {Vendor}/
- {Module}/
- etc/
- cache.xml
- module.xml
- Model/
- Cache/
- {ClassCacheName}.php
- registration.php
- composer.json