Spec-Zone.ru › CodeIgniter 4

Драйвер кэширования

CodeIgniter предоставляет обёртки вокруг некоторых самых популярных форм быстрого и динамичного кэширования. Все, кроме файлового кэширования, требуют определённых требований к серверу, и если они не удовлетворены, будет выброшено исключение Fatal Exception.

  • Пример использования
    • Настройка кэша
  • Справочник по классу
  • Драйверы
    • Файловое кэширование
    • Кэширование Memcached
    • Кэширование WinCache
    • Кэширование Redis
    • Кэширование Predis
    • Кэш-заглушка

Пример использования

Следующий пример демонстрирует типичный способ использования в контроллерах.

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API