Кэширование данных — Yii2

Кэширование данных заключается в сохранении некоторой переменной PHP в кэше и её последующем извлечении. Оно является основой для расширенных возможностей, таких как кэширование запросов и кэширование страниц. Типичные варианты кэширования и получения данных:

// пробуем извлечь $data из кеша
$data = $cache->get($key);
if ($data === false) {
    // $data нет в кеше, вычисляем заново
    $data = $this->calculateSomething();
    // сохраняем значение $data в кеше
    $cache->set($key, $data);
}
// значение $data доступно здесь
$data = $cache->getOrSet($key, function () {
    return $this->calculateSomething();
});

Когда анонимной функции требуются данные из внешней области видимости:

$user_id = 42;
$data = $cache->getOrSet($key, function () use ($user_id) {
    return $this->calculateSomething($user_id);
});

Компоненты кэширования

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

Кэширование с использованием файлов:

$config = [
    /*...*/
    'components' => [
        /*...*/
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        /*...*/
    ],
    /*...*/
];

Кэширование с использованием Memcached с двумя серверами:

$config = [
    /*...*/
    'components' => [
        /*...*/
        'cache' => [
            'class' => 'yii\caching\MemCache',
            'servers' => [
                [
                    'host' => 'server1',
                    'port' => 11211,
                    'weight' => 100,
                ],
                [
                    'host' => 'server2',
                    'port' => 11211,
                    'weight' => 50,
                ],
        ],
        /*...*/
    ],
    /*...*/
];

Теперь получить доступ к компоненту кэша можно используя выражение Yii::$app->cache.

Класс yii\caching\Cache

У всех компонентов кэша имеется один базовый класс yii\caching\Cache со следующими методами:

  • get() — возвращает данные по ключу
  • set() — сохраняет данные по ключу
  • add() — сохраняет данные по ключу, если такого ключа ещё нет
  • getOrSet() — возвращает данные по указанному ключу
  • multiGet() — извлекает сразу несколько элементов
  • multiSet() — сохраняет несколько элементов данных
  • multiAdd() — сохраняет несколько элементов данных
  • exists() — есть ли указанный ключ в кэше
  • delete() — удаляет указанный ключ
  • flush() — удаляет все данные

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

Срок действия кеша

Данные, сохраненные в кеш, остаются там навсегда и могут быть удалены только из-за особенностей функционирования хранилища (например, место для кэширования заполнено и старые данные удаляются). Чтобы изменить этот режим, можно передать время жизни кеша при вызове метода set():

// хранить данные не более 45 секунд
$cache->set($key, $data, 45);

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

Leave a Comment