Драйвер кэширования
CodeIgniter предоставляет обёртки вокруг некоторых самых популярных форм быстрого и динамичного кэширования. Все, кроме файлового кэширования, требуют определённых требований к серверу, и если они не удовлетворены, будет выброшено исключение Fatal Exception.
Пример использования
Следующий пример демонстрирует типичный способ использования в контроллерах.
if (! $foo = cache('foo')) {
echo 'Saving to the cache!<br />';
$foo = 'foobarbaz!';
// Save into the cache for 5 minutes
cache()->save('foo', $foo, 300);
}
echo $foo;
Вы можете получить экземпляр движка кэша напрямую через класс Services:
$cache = \Config\Services::cache();
$foo = $cache->get('foo');
Настройка кэша
Все настройки движка кэша выполняются в файле app/Config/Cache.php. В этом файле доступны следующие параметры.
$handler
Это имя обработчика, который должен использоваться в качестве основного при запуске движка. Доступные имена: dummy, file, memcached, redis, predis, wincache.
$backupHandler
В случае, если обработчик $handler недоступен, используется этот запасной обработчик. Чаще всего это обработчик file, так как файловая система всегда доступна, но может быть неподходящей для сложных многосерверных установок.
$prefix
Если у вас несколько приложений, использующих один и тот же хранилище кэша, вы можете добавить здесь строку-префикс, которая будет добавляться к именам всех ключей.
$ttl
Это значение по умолчанию в секундах для сохранения элементов, если оно не указано. ПРЕДУПРЕЖДЕНИЕ: В обработчиках фреймворка оно не используется (встроено значение 60 секунд), но может быть полезно для проектов и модулей. В будущем релизе это значение будет заменено.
$file
Это массив настроек, специфичных для обработчика File, определяющих, как должны сохраняться файлы кэша.
$memcached
Это массив серверов, которые будут использоваться при использовании обработчика Memcache(d).
$redis
Настройки сервера Redis, которые вы хотите использовать при использовании обработчиков Redis и Predis.
Справочник по классу
-
isSupported() -
Возвращает: trueпри поддержке,falseв противном случаеТип возвращаемого значения: bool
-
get($key): mixed -
Параметры: - $key (string) – Имя элемента кэша
Возвращает: Значение элемента или
nullпри отсутствииТип возвращаемого значения: mixed
Этот метод пытается извлечь элемент из хранилища кэша. Если элемент не существует, метод возвращает null.
Пример:
$foo = $cache->get('my_cached_item');
-
remember(string $key, int $ttl, Closure $callback) -
Параметры: - $key (string) – Имя элемента кэша
- $ttl (int) – Время жизни в секундах
- $callback (Closure) – Обратный вызов для вызова, если элемент кэша возвращает null
Возвращает: Значение элемента кэша
Тип возвращаемого значения: mixed
Получает элемент из кэша. Если было возвращено
null, этот метод вызовет обратный вызов и сохранит результат. В любом случае вернёт значение.
-
save(string $key, $data[, int $ttl = 60[, $raw = false]]) -
Параметры: - $key (string) – Имя элемента кэша
- $data (mixed) – данные для сохранения
- $ttl (int) – Время жизни, в секундах (по умолчанию 60)
- $raw (bool) – Сохранить ли исходное значение
Возвращает: trueпри успехе,falseпри неудачеТип возвращаемого значения: bool
Этот метод сохраняет элемент в хранилище кэша. Если сохранение завершилось неудачно, метод вернёт
false.Пример:
$cache->save('cache_item_id', 'data_to_cache');
Примечание
Параметр $raw используется только обработчиком Memcache, чтобы разрешить использование increment() и decrement().
-
delete($key): bool -
Параметры: - $key (string) – имя кэшированного элемента
Возвращает: trueпри успехе,falseпри неудачеТип возвращаемого значения: bool
Этот метод удаляет конкретный элемент из хранилища кэша. Если удаление завершилось неудачно, метод вернёт false.
Пример:
$cache->delete('cache_item_id');
-
deleteMatching($pattern): integer -
Параметры: - $pattern (string) – шаблон в стиле glob для соответствия ключам кэшированных элементов
Возвращает: количество удалённых элементов
Тип возвращаемого значения: integer
Этот метод удаляет сразу несколько элементов из хранилища кэша, сопоставляя их ключи с шаблоном в стиле glob. Он возвращает общее количество удалённых элементов.
Важно
Этот метод реализован только для обработчиков File, Redis и Predis. Из-за ограничений он не был реализован для обработчиков Memcached и Wincache.
Пример:
$cache->deleteMatching('prefix_*'); // deletes all items of which keys start with "prefix_" $cache->deleteMatching('*_suffix'); // deletes all items of which keys end with "_suffix"Для получения дополнительной информации о синтаксисе в стиле glob, пожалуйста, обратитесь к Glob (programming).
-
increment($key[, $offset = 1]): mixed -
Параметры: - $key (string) – Идентификатор кэша
- $offset (int) – Шаг/значение для добавления
Возвращает: Новое значение при успехе,
falseпри неудачеТип возвращаемого значения: mixed
Выполняет атомное увеличение хранящегося значения.
Пример:
// 'iterator' has a value of 2 $cache->increment('iterator'); // 'iterator' is now 3 $cache->increment('iterator', 3); // 'iterator' is now 6
-
decrement($key[, $offset = 1]): mixed -
Параметры: - $key (string) – Идентификатор кэша
- $offset (int) – Шаг/значение для уменьшения
Возвращает: Новое значение при успехе,
falseпри неудачеТип возвращаемого значения: mixed
Выполняет атомное уменьшение хранящегося значения.
Пример:
// 'iterator' has a value of 6 $cache->decrement('iterator'); // 'iterator' is now 5 $cache->decrement('iterator', 2); // 'iterator' is now 3
-
clean() -
Возвращает: trueпри успехе,falseпри неудачеТип возвращаемого значения: bool Этот метод очистит весь кэш. Если удаление файлов кэша завершилось неудачно, метод вернёт false.
Пример:
$cache->clean();
-
getCacheInfo() -
Возвращает: Информация о всей базе данных кэша Тип возвращаемого значения: mixed Этот метод вернёт информацию обо всём кэше.
Пример:
var_dump($cache->getCacheInfo());
Примечание
Возвращаемая информация и структура данных зависят от используемого адаптера.
-
getMetadata(string $key) -
Параметры: - $key (string) – Имя элемента кэша
Возвращаемое значение: Метаданные для кэшированного элемента.
nullдля отсутствующих элементов, или массив с по крайней мере ключом “expire” для абсолютного времени истечения срока действия (nullдля кэша без истечения срока действия).Тип возвращаемого значения: array|null
Этот метод вернёт подробную информацию об определённом элементе в кэше.
Пример:
var_dump($cache->getMetadata('my_cached_item'));
Примечание
Возвращаемая информация и структура данных зависят от используемого адаптера. Некоторые адаптеры (File, Memcached, Wincache) всё ещё возвращают false для отсутствующих элементов.
-
static validateKey(string $key, string $prefix) -
Параметры: - $key (string) – Возможный ключ кэша
- $prefix (string) – Необязательный префикс
Возвращаемое значение: Проверенный и с префиксом ключ. Если длина ключа превышает максимальную длину ключа драйвера, он будет хеширован.
Тип возвращаемого значения: string
Этот метод используется методами обработчика для проверки того, что ключи являются валидными. Он выбросит
InvalidArgumentExceptionдля не-строковых значений, недопустимых символов и пустых длин.Пример:
$prefixedKey = BaseHandler::validateKey($key, $prefix);
Драйверы
Кэширование на основе файлов
В отличие от кэширования из класса Output, драйвер кэширования на основе файлов позволяет кэшировать части файлов представления. Используйте с осторожностью и убедитесь в тестировании вашего приложения, так как в определённый момент ввод-вывод на диск может свести на нет положительный эффект от кэширования. Это требует, чтобы директория кэша была действительно доступна для записи приложением.
Кэширование Memcached
Серверы Memcached могут быть указаны в файле конфигурации кэша. Доступные параметры:
public $memcached = [
'host' => '127.0.0.1',
'port' => 11211,
'weight' => 1,
'raw' => false,
];
Для получения дополнительной информации о Memcached, пожалуйста, посетите https://www.php.net/memcached.
Кэширование WinCache
В Windows вы также можете использовать драйвер WinCache.
Для получения дополнительной информации о WinCache, пожалуйста, посетите https://www.php.net/wincache.
Кэширование Redis
Redis — это хранилище ключей-значений в оперативной памяти, которое может работать в режиме кэширования LRU. Для его использования вам необходим сервер Redis и расширение phpredis для PHP.
Параметры конфигурации для подключения к серверу Redis хранятся в файле конфигурации кэша. Доступные параметры:
public $redis = [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'timeout' => 0,
'database' => 0,
];
Для получения дополнительной информации о Redis, пожалуйста, посетите https://redis.io.
Кэширование Predis
Predis — это гибкая и полная функция библиотека PHP-клиента для хранилища ключей-значений Redis. Чтобы использовать её, из командной строки в корне вашего проекта:
composer require predis/predis
Для получения дополнительной информации о Redis, пожалуйста, посетите https://github.com/nrk/predis.
Кэш-заглушка
Это кэш-бекенд, который всегда будет «промахиваться». Он не хранит данные, но позволяет вам сохранить ваш код кэширования в средах, которые не поддерживают ваш выбранный кэш.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/libraries/caching.html