Драйвер кэширования
CodeIgniter предоставляет обёртки вокруг некоторых самых популярных форм быстрого и динамичного кэширования. Все, кроме файлового кэширования, требуют определённых требований к серверу, и будет брошено исключение Fatal Exception, если эти требования не соблюдены.
Пример использования
Следующий пример загрузит драйвер кэширования, укажет APC в качестве используемого драйвера и вернётся к файловому кэшированию, если APC недоступен в среде хостинга.
$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
if ( ! $foo = $this->cache->get('foo'))
{
echo 'Saving to the cache!<br />';
$foo = 'foobarbaz!';
// Save into the cache for 5 minutes
$this->cache->save('foo', $foo, 300);
}
echo $foo;
Также можно задавать префикс для имён элементов кэша через настройку key_prefix, что полезно для избежания коллизий, когда вы работаете с несколькими приложениями в одной среде.
$this->load->driver('cache',
array('adapter' => 'apc', 'backup' => 'file', 'key_prefix' => 'my_')
);
$this->cache->get('foo'); // Will get the cache entry named 'my_foo'
Справочная информация по классу
-
class CI_Cache -
-
is_supported($driver) -
Параметры: - $driver (string) – имя драйвера кэширования
Возвращаемое значение: TRUE, если поддерживается, FALSE — если нет
Тип возвращаемого значения: bool
Этот метод автоматически вызывается при обращении к драйверам через
$this->cache->get(). Однако, если используются отдельные драйверы, убедитесь, что этот метод вызван для проверки поддержки драйвера в среде хостинга.if ($this->cache->apc->is_supported()) { if ($data = $this->cache->apc->get('my_cache')) { // do things. } }
-
get($id) -
Параметры: - $id (string) – Имя элемента кэша
Возвращаемое значение: Значение элемента или FALSE, если не найдено
Тип возвращаемого значения: mixed
Этот метод попытается извлечь элемент из кэша. Если элемент не существует, метод вернёт FALSE.
$foo = $this->cache->get('my_cached_item');
-
save($id, $data[, $ttl = 60[, $raw = FALSE]]) -
Параметры: - $id (string) – Имя элемента кэша
- $data (mixed) – данные для сохранения
- $ttl (int) – Время жизни, в секундах (по умолчанию 60)
- $raw (bool) – Сохранять ли исходное значение
Возвращаемое значение: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: string
Этот метод сохранит элемент в кэше. Если сохранение не удастся, метод вернёт FALSE.
$this->cache->save('cache_item_id', 'data_to_cache');Примечание
Параметр
$rawиспользуется только APC и Memcache, чтобы позволить использованиеincrement()иdecrement().
-
delete($id) -
Параметры: - $id (string) – имя кэшируемого элемента
Возвращаемое значение: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool
Этот метод удалит конкретный элемент из кэша. Если удаление не удастся, метод вернёт FALSE.
$this->cache->delete('cache_item_id');
-
increment($id[, $offset = 1]) -
Параметры: - $id (string) – Идентификатор кэша
- $offset (int) – Приращение/значение для добавления
Возвращаемое значение: Новое значение при успехе, FALSE при ошибке
Тип возвращаемого значения: mixed
Выполняет атомное увеличение хранимого значения.
// 'iterator' has a value of 2 $this->cache->increment('iterator'); // 'iterator' is now 3 $this->cache->increment('iterator', 3); // 'iterator' is now 6
-
decrement($id[, $offset = 1]) -
Параметры: - $id (string) – Идентификатор кэша
- $offset (int) – Приращение/значение для уменьшения
Возвращаемое значение: Новое значение при успехе, FALSE при ошибке
Тип возвращаемого значения: mixed
Выполняет атомное уменьшение хранимого значения.
// 'iterator' has a value of 6 $this->cache->decrement('iterator'); // 'iterator' is now 5 $this->cache->decrement('iterator', 2); // 'iterator' is now 3
-
clean() -
Возвращаемое значение: TRUE при успехе, FALSE при ошибке Тип возвращаемого значения: bool Этот метод очистит весь кэш. Если удаление файлов кэша не удастся, метод вернёт FALSE.
$this->cache->clean();
-
cache_info() -
Возвращаемое значение: Информация о всей базе данных кэша Тип возвращаемого значения: mixed Этот метод вернёт информацию обо всём кэше.
var_dump($this->cache->cache_info());
Примечание
Возвращаемая информация и структура данных зависят от используемого адаптера.
-
get_metadata($id) -
Параметры: - $id (string) – Имя элемента кэша
Возвращаемое значение: Метаданные для кэшируемого элемента
Тип возвращаемого значения: mixed
Этот метод вернёт подробную информацию о конкретном элементе в кэше.
var_dump($this->cache->get_metadata('my_cached_item'));Примечание
Возвращаемая информация и структура данных зависят от используемого адаптера.
-
Драйверы
Кэширование с использованием Alternative PHP Cache (APC)
Все перечисленные выше методы можно получить, не передавая конкретный адаптер загрузчику драйвера следующим образом:
$this->load->driver('cache');
$this->cache->apc->save('foo', 'bar', 10);
Для получения дополнительной информации об APC, пожалуйста, обратитесь к https://php.net/apc.
Файловое кэширование
В отличие от кэширования из класса Output, драйвер файлового кэширования позволяет кэшировать фрагменты файлов представления. Используйте его с осторожностью и убедитесь, что вы провели бенчмаркинг вашего приложения, так как в какой-то момент ввод-вывод с диска может свести на нет преимущества кэширования.
Все перечисленные выше методы можно получить, не передавая конкретный адаптер загрузчику драйвера следующим образом:
$this->load->driver('cache');
$this->cache->file->save('foo', 'bar', 10);
Кэширование с использованием Memcached
Несколько серверов Memcached могут быть указаны в файле конфигурации memcached.php, расположенном в каталоге _application/config/*.
Все перечисленные выше методы можно получить, не передавая конкретный адаптер загрузчику драйвера следующим образом:
$this->load->driver('cache');
$this->cache->memcached->save('foo', 'bar', 10);
Для получения дополнительной информации о Memcached, пожалуйста, обратитесь к https://php.net/memcached.
Кэширование с использованием WinCache
В Windows вы также можете использовать драйвер WinCache.
Все перечисленные выше методы можно получить, не передавая конкретный адаптер загрузчику драйвера следующим образом:
$this->load->driver('cache');
$this->cache->wincache->save('foo', 'bar', 10);
Для получения дополнительной информации о WinCache, пожалуйста, обратитесь к https://php.net/wincache.
Кэширование с использованием Redis
Redis — это хранилище ключей-значений в оперативной памяти, которое может работать в режиме кэширования LRU. Для его использования вам потребуется Redis сервер и расширение phpredis для PHP.
Параметры конфигурации для подключения к Redis серверу должны быть сохранены в файле application/config/redis.php. Доступные параметры:
$config['socket_type'] = 'tcp'; //`tcp` or `unix` $config['socket'] = '/var/run/redis.sock'; // in case of `unix` socket type $config['host'] = '127.0.0.1'; $config['password'] = NULL; $config['port'] = 6379; $config['timeout'] = 0;
Все перечисленные выше методы можно получить, не передавая конкретный адаптер загрузчику драйвера следующим образом:
$this->load->driver('cache');
$this->cache->redis->save('foo', 'bar', 10);
Для получения дополнительной информации о Redis, пожалуйста, обратитесь к http://redis.io.
Драйвер Dummy Cache
Это кэширующий бэкенд, который всегда «промахивается». Он не хранит данные, но позволяет вам сохранить ваш кэширующий код в средах, которые не поддерживают выбранный вами кэш.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/caching.html