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