Должен ли я использовать динамические переменные в тегах кеша?

magento.stackexchange https://magento.stackexchange.com/questions/120748

Вопрос

TL;DR

Могут ли/должны ли кэшироваться теги в Magento быть динамическими?

Задний план

Я создаю интеграцию CMS из внешней CMS в Magento.Данные хранятся в Elasticsearch в AWS.У меня есть собственный контроллер, на который перезаписывается URL-адрес страницы, который использует URL-адрес в качестве ключа и загружает данные из созданного мной пользовательского блока с именем content/dynamic.

Теперь я хочу добавить к нему блочное кэширование.

Я знаю, что соответствующие настройки здесь — это теги кеша и ключ кеша.

Я думаю использовать Mage_Cms_Model_Block::CACHE_TAG, а также хранилище в качестве базовых тегов кеша, а затем добавить собственный тег кеша, например Me_Content_Model_Dynamic::CACHE_TAG, и соответствующую запись <global><cache><types> для этого, чтобы я мог очистить весь кешированный динамический контент с экрана управления кешем в администраторе Magento..

Одна из функций, которую мне нужно реализовать, — это иметь возможность обновлять кэши контента для блока content/dynamic для конкретной страницы CMS, а также любые блоки контента под ним.

Особенности

Я думаю о добавлении еще одного динамического тега кеша, например dynamic_content_hashofURLhere, к каждому экземпляру страницы content/dynamic и всем его дочерним блокам, чтобы я мог легко идентифицировать записи кэша динамической страницы для всего контента, относящегося к определенной странице.

Вопрос

Это правильный способ использования тегов кеша?

Мне кажется, это простой способ настроить таргетинг и сделать недействительными записи кеша блоков для страницы на целую страницу (независимо от того, сколько их) без необходимости создавать ключ кеша для каждого блока контента на странице и аннулировать их по отдельности..

Используются ли теги динамического кеша в кодовой базе Magento?

Это лучшая практика?

Для ясности: я не хочу очищать теги динамического кеша на странице управления кешем.Я хотел бы сделать это программно.На странице управления кешем я бы выбрал только статический тег кеша, который я добавляю отдельно от этого динамического.

Это было полезно?

Решение

Могут ли/должны ли кэш-теги в Magento быть динамическими?... Это правильный способ использования тегов кеша?

Да!Именно для этого и нужны теги кеша — чтобы сгруппировать несколько записей кеша вместе.

Вот несколько цитат из разных блогов:

Теги кеша существуют для того, чтобы мы могли выборочно очищать экземпляры кеша.

Источник: Эрфан Эмани

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

Источник: Ник Джонс


Предположительно наличие динамических тегов кеша означает, что вы можете получить сотни или тысячи тегов кеша в своем хранилище кеша.Независимо от того, влияет ли это на производительность из-за отсутствия этих тегов кеша, вероятно, потребуется некоторое сравнение производительности, однако теоретически это не должно приводить к большим накладным расходам, поскольку теги кеша не запрашиваются, если они не очищены для удаления.

Предполагая, что тег динамического кеша закончился как dynamic_content_HISUDFHS8y92333, вы можете легко очистить все записи кэша блока контента для страницы HISUDFHS8y92333 следующим образом:

/** @var Mage_Core_Model_Cache $cache */
$cache = Mage::app()->getCacheInstance();
$cache->clean(array(Me_Content_Model_Dynamic::CACHE_TAG . '_HISUDFHS8y92333'));

Используются ли теги динамического кеша в кодовой базе Magento?

да.

Для быстрого примера вы можете взглянуть на Mage_Core_Block_Abstract::addModelTags():

# File: app/code/core/Mage/Core/Block/Abstract.php
public function addModelTags(Mage_Core_Model_Abstract $model)
{
    $cacheTags = $model->getCacheIdTags();
    if (false !== $cacheTags) {
        $this->addCacheTag($cacheTags);
    }
    return $this;
}

Если вы изучите Mage_Core_Model_Abstract::getCacheIdTags, вы увидите, что он возвращает массив тегов кеша существующей модели с идентификатором модели, добавленным в конец :

# File: app/code/core/Mage/Core/Model/Abstract.php
public function getCacheIdTags()
{
    $tags = false;
    if ($this->getId() && $this->_cacheTag) {
        $tags = array();
        if (is_array($this->_cacheTag)) {
            foreach ($this->_cacheTag as $_tag) {
                $tags[] = $_tag.'_'.$this->getId();
            }
        } else {
            $tags[] = $this->_cacheTag.'_'.$this->getId();
        }
    }
    return $tags;
}

Этот метод вызывается Mage_Core_Model_Abstract::getCacheTags, что означает, что теги динамического кеша используются в любой модели Magento (которая простирается от абстрактной базовой модели), в которой разрешено кэширование.

Это лучшая практика?

Да, конечно.Это намного лучше, чем искать в кэш-хранилище ключи, соответствующие определенному шаблону, просто чтобы удалить их все.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top