Перейти к основному содержимому

Кэш

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

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

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

Все описанные виды кэша используют интерфейс Pimcore\Cache для хранения данных. Pimcore\Cache использует обработчик Pimcore\Cache\Core\CoreCacheHandler, который накладывает логику кэширования Pimcore поверх реализации PSR-6, поддерживающей тегирование кэша.

Настройка кэша

Pimcore использует пул кэша Symfony pimcore.cache.pool. Вы можете настроить его под свои нужды, но крайне важно, чтобы выбранный пул поддерживал теги (tags).

# config/packages/cache.yaml  
framework:
cache:
pools:
pimcore.cache.pool:
public: true
#tags: true
default_lifetime: 31536000 # 1 year
#adapter: pimcore.cache.adapter.doctrine_dbal
#provider: 'doctrine.dbal.default_connection'
adapter: cache.adapter.redis_tag_aware
provider: 'redis://localhost'

По умолчанию кэш повторно использует соединение Doctrine и записывает данные в таблицы cache_items вашей БД. Вы можете переопределить используемое соединение, установив в параметр connection известное соединение Doctrine (см. ссылка на DoctrineBundle для получения дополнительной информации).

Если вы включаете конфигурацию redis, кэш Redis будет использоваться вместо кэша Doctrine, даже если Doctrine также включен.

ВАЖНО! Обязательно протестируйте конфигурацию Redis. Если Pimcore не сможет подключиться к Redis, вся система перестанет работать.

Рекомендуемая конфигурация Redis (redis.conf)

# Выберите подходящее значение для ваших данных 
maxmemory 768mb

# ВНИМАНИЕ! Другие политики вызовут непредсказуемые ошибки в данных!
maxmemory-policy volatile-lru
save ""

Минимальная поддерживаемая версия Redis — 3.0.

Пожалуйста, обратите внимание, что адаптер Redis в настоящее время должным образом не поддерживает настройки кластера Redis.

Рабочий процесс кэширования элементов (ассетов, документов, объектов)

Element Cache Workflow

Использование кэша в вашем приложении

Для взаимодействия с основным кэшем используйте фасад Pimcore\Cache или напрямую сервис Pimcore\Cache\Core\CoreCacheHandler.

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

Если вам не нужна функциональность транзакционных тегов, вы можете использовать любую систему кэширования Symfony, но помните, что сторонние кэши не будут интегрированы с механизмом очистки кэша Pimcore.

Пример пользовательского использования в экшне

$lifetime = 99999;  
$cacheKey = md5($uri);
if(!$data = \Pimcore\Cache::load($cacheKey)) {
$data = \Pimcore\Tool::getHttpData('http://www.pimcore.org/...');
\Pimcore\Cache::save(
$data,
$cacheKey,
["output","tag1","tag2"],
$lifetime);
}

Обзор основных функций

// Отключить кэш глобально 
\Pimcore\Cache::disable();

// Включить кэш глобально
\Pimcore\Cache::enable();

// Инвалидировать (очистить) кэш по тегу
\Pimcore\Cache::clearTag("mytag");

// Инвалидировать кэш по нескольким тегам
\Pimcore\Cache::clearTags(["mytag","output"]);

// Полная очистка всего кэша
\Pimcore\Cache::clearAll();

// Отключить очередь и записывать в кэш немедленно
\Pimcore\Cache::setForceImmediateWrite(true);

Отключение кэша для одного запроса

Для целей тестирования иногда полезно деактивировать кэш для конкретного запроса. Это можно сделать, добавив в URL параметр pimcore_nocache=true. Примечание: Это работает только в том случае, если включен DEBUG MODE

Пример: http://www.pimcore.org/download?pimcore_nocache=true

Это отключит весь кэш полностью. Если вы хотите отключить только выходной кэш (output-cache), используйте параметр ?pimcore_outputfilters_disabled=true Здесь вы можете найти дополнительные магические параметры.

Если вы хотите отключить кэш в своем коде, вы можете использовать:

\Pimcore\Cache::disable();  

Это приведет к отключению всего кэша, а не только выходного. ВНИМАНИЕ: Не используйте это в продакшн коде!

Также можно просто отключить кэширование выходных данных в вашем коде, подробнее читайте здесь.

Дополнительно

  • Подробные сведения о выходном кэше см. в разделе Output Cache.

Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.