Класс кеширования базы данных  

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

Важно

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

Важно

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

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

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

  • Создание каталога для записи на сервере, где файлы кеша могут быть сохранены.
  • Установить путь к папке кеша вашего application/config/database.php файла.
  • Включить функцию кеширования, либо глобально, установив предпочтения в application/config/database.php файл, или вручную, как описано ниже.

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

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

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

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

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

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

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

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

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

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

Например, у вас есть контроллер с названием blog и с функцией - comments, которая содержит три запроса. Система кеширования создаст папку с называнием blog+comments, в которую она запишет три файла кеша.

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

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

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

Не все функции базы данных работают с кешированием   

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

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

  • num_fields()
  • field_names()
  • field_data()
  • free_result()

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

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

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

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

// Turn caching on
$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();