Spec-Zone.ru › CodeIgniter 3

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

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

  • Пример использования
  • Справочная информация по классу
  • Драйверы
    • Кэширование с использованием Alternative PHP Cache (APC)
    • Файловое кэширование
    • Кэширование с использованием Memcached
    • Кэширование с использованием WinCache
    • Кэширование с использованием Redis
    • Драйвер Dummy Cache

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

Следующий пример загрузит драйвер кэширования, укажет 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

Spec-Zone.ru

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