CodeIgniter User Guide Version 2.0.0


Класс Database Caching (кеширование)

Класс Database Caching позволяет вам кешировать ваши запросы как текстовые файлы, для снижения нагрузки на базу данных.

Важно:  Этот класс инициализируется автоматически драйвером базы данных. Не надо загружать этот класс вручную.

Примечание:  Не все результаты запросов доступны для кеширования. Пожалуйста, прочтите эту страницу внимательно.

Включение кеширования

Кеширование включается в три шага:

Будучи включенным, кеширование будет происходить автоматически при загрузке страницы, содержащей запросы в базу данных.

Как работает кеширование?

Система кеширования CodeIgniter работает динамически, при просмотре страниц. Когда кеширование включено, страница загружается первый раз, объект результата сериализуется и сохраняется в текстовом файле на вашем сервере. В следующий раз страница загружает кеш из файла, который будет использован вместо запроса в базу данных. Эффективность использования базы данных может быть значительно улучшена для страниц, которые используют кеширование.

Только запросы на чтение (SELECT) могут быть кешированы, так как только эти типы запросов производят результат. Запросы на запись (INSERT, UPDATE и другие) не могут быть кешированы, так как они не производят результат.

Файлы кеша не ограничены по времени существования. Любые запросы, которые могут быть кешированы, останутся кешированными до тех пор, пока вы не удалите их. Кеширующая система позволяет вам очищать кеши, ассоциированные с конкретными страницами, или вы можете удалить целую коллекцию файлов кешей. Обычно вы будете использовать функции, описанные ниже для того, чтобы удалять кеш, например, после добавления информации в базу данных.

Почему кеширование увеличивает производительность сайта?

Прирост производительности в результате кеширования зависит от многих факторов. Если вы имеете хорошо оптимизированную базу данных с очень низкой загрузкой, возможно вы не увидите увеличения производительности. Если ваша база данных находится под тяжелой нагрузкой, вы увидите улучшенную реакцию, если ваша файловая система не перегружена. Помните, что кеширование просто изменяет способ получения информации, перемещая его от операций с базой данных к файловой системе.

В некоторых кластеризованных серверных окружениях, например, кеширование может быть вредным, так как операции в файловой системе слишком интенсивные. На одиночных серверах с общими ресурсами, кеширование может быть полезно. К сожалению, нет единого ответа на вопрос, должны ли вы кешировать вашу базу данных. Это действительно зависит от ситуации.

Как сохраняются файлы кеша?

CodeIgniter помещает результаты КАЖДОГО запроса в его собственный файл кеша. Набор файлов кешей организуется в поддиректории, в соответствии с функциями вашего контроллера. Точнее говоря, поддиректории именуются идентично с первыми двумя сегментами URI (имя класса контроллера и имя функции).

Если вы используете динамические запросы, которые изменяются на основе информации вашего URI (при использовании нумерации страниц, к примеру), каждый запрос будет делать свой собственный файл кеша. Также возможна ситуация, когда вы получите намного больше кеш-файлов, чем запросов.

Управление вашими файлами кешей

Так как срок хранения кеш-файлов не ограничен, вы должны организовать удаление в вашем приложении. Например, давайте предположим, что вы имеете блог, который позволяет пользователям комментировать. При добавлении нового комментария вы удалите файл кеша, связанный с функцией контроллера, которая обслуживает ваши комментарии. Вы найдете две функции удаления, описанные ниже, которые помогут вам очистить данные.

Не все функции БД работают с кешированием

Наконец, мы должны отметить, что кешированный объект результата - это упрощенная версия полного объекта результата. По этой причине, некоторые из функций запросов не доступны для использования.

Следующие функции НЕ доступны для использования с кешированным объектом:

Также, два ресурса базы данных (result_id и conn_id) недоступны при кешировании, так как ресурсы результата относятся только к операциям в реальном времени.


Справка по функциям

$this->db->cache_on()  /   $this->db->cache_off()

Вручную включает и выключает кеширование. Это может быть полезно, если вы хотите предотвратить кеширование некоторых запросов. Пример:

// Включает кеширование
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mytable");

// Выключает кеширование для этого запроса
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");

// Включает кеширование
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM another_table");

$this->db->cache_delete()

Удаляет файлы кеша, ассоциированные с конкретной страницей. Это полезно, если вы нуждаетесь в очистке кеша после обновления данных.

Кеширующая система сохраняет ваши кеш-файлы в директориях, которые соответствуют URI просматриваемой страницы. Например, если вы просматриваете страницу example.com/index.php/blog/comments, кеширующая система положит все файлы, связанные с этой страницей, в директорию blog+comments. Для удаления кешей вы будете использовать:

$this->db->cache_delete('blog', 'comments');

Если вы не использовали какие-либо параметры, будет использован текущий URI для определения того, что должно быть удалено.

$this->db->cache_delete_all()

Очищает все существующие файлы кешей. Пример:

$this->db->cache_delete_all();