Как создать пользовательский кэш в Magento 2


Справочная информация

Что такое кэш?

Кэш — это высокоскоростной физический уровень хранения данных, на котором хранится подмножество данных, обычно временного характера, чтобы будущие запросы на эти данные обслуживались быстрее, чем при обращении к основному месту хранения данных. Кэширование позволяет эффективно повторно использовать ранее полученные или вычисленные данные.

Данные в кэше обычно хранятся в аппаратных средствах с быстрым доступом, таких как память с произвольным доступом (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
Войдите в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий