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

05.05.2019

Теги: Web-разработка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 в конфигурации компонента кеша.

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

Поиск: Web-разработка • Yii2 • Кеширование • Фреймворк

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.