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 • Кеширование • Фреймворк