← Назад к вопросам

Какие знаешь типы кэширования в Yii2?

2.2 Middle🔥 82 комментариев
#Фреймворки

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Типы кэширования в Yii2

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

1. Файловое кэширование (FileCache)

Самый простой тип, который хранит данные в файлах на сервере. Идеально подходит для небольших проектов или разработки.

'components' => [
    'cache' => [
        'class' => 'yii\caching\FileCache',
        // Дополнительные настройки
        'cachePath' => '@runtime/cache',
        'directoryLevel' => 1, // Уровень вложенности директорий
    ],
],

Преимущества: Не требует дополнительных сервисов, простота настройки. Недостатки: Медленнее, чем in-memory решения, нагрузка на файловую систему.

2. Кэширование в памяти (MemCache, Redis)

Для высоконагруженных проектов использую in-memory хранилища.

Memcached:

'components' => [
    'cache' => [
        'class' => 'yii\caching\MemCache',
        'servers' => [
            [
                'host' => 'server1',
                'port' => 11211,
                'weight' => 100,
            ],
        ],
    ],
],

Redis (требуется расширение php-redis):

'components' => [
    'cache' => [
        'class' => 'yii\redis\Cache',
        'redis' => [
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 0,
        ],
    ],
],

Преимущества: Высокая скорость, распределённое хранение, поддержка структур данных. Недостатки: Требует отдельного сервиса, сложнее в настройке.

3. Кэширование в базе данных (DbCache)

Хранит кэш в таблице базы данных. Полезно в распределённых системах, где несколько серверов используют общую БД.

'components' => [
    'cache' => [
        'class' => 'yii\caching\DbCache',
        // Таблица должна быть создана заранее
        'cacheTable' => '{{%cache}}',
    ],
],

Создание таблицы:

CREATE TABLE cache (
    id CHAR(128) NOT NULL PRIMARY KEY,
    expire INT(11),
    data LONGBLOB
);

4. APC/APCu кэширование

Использует встроенный в PHP кэш. Отлично подходит для хранения скомпилированного кода и данных.

'components' => [
    'cache' => [
        'class' => 'yii\caching\ApcCache',
        // Для PHP 5.5+ используем ApcuCache
        // 'class' => 'yii\caching\ApcuCache',
    ],
],

5. XCache кэширование

Альтернатива APC, но менее распространённая в современных проектах.

6. Кэширование сессий (SessionCache)

Специализированный кэш для хранения данных сессий.

7. Цепочка кэшей (ChainedCache)

Позволяет объединить несколько типов кэширования в цепочку. Например, сначала проверять в памяти (Redis), затем в файлах.

'components' => [
    'cache' => [
        'class' => 'yii\caching\ChainCache',
        'caches' => ['apc', 'file'],
    ],
],

8. DummyCache

"Заглушка" для отключения кэширования в режиме разработки. Все операции записи игнорируются, чтение всегда возвращает false.

Практическое применение

В реальных проектах я комбинирую разные типы кэширования:

  1. Данные, часто читаемые, редко изменяемые — Redis/Memcached
  2. Конфигурации и метаданные — APC/APCu
  3. Временные файлы — FileCache
  4. Распределённые системы — DbCache или Redis

Ключевые особенности Yii2 кэширования

  • Единый интерфейс: Все типы кэшей реализуют общий интерфейс yii\caching\Cache
  • Зависимости (Dependency): Можно установить зависимости от файлов, выражений, других кэш-ключей
  • Группировка (TagDependency): Групповое удаление по тегам
  • Автоматическая сериализация: Не нужно вручную преобразовывать данные

Пример использования

// Получение данных с кэшированием
$data = Yii::$app->cache->getOrSet('user_stats', function () {
    return User::find()->select('COUNT(*) as count')->scalar();
}, 3600, new TagDependency(['tags' => 'users']));

// При изменении пользователей
TagDependency::invalidate(Yii::$app->cache, 'users');

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

Какие знаешь типы кэширования в Yii2? | PrepBro