Класс кеширования базы данных
Класс кеширования базы данных позволяет кешировать ваши запросы в текстовый файл для снижения нагрузки на базу данных.
Важно
Этот класс инициализируется автоматически с помощью драйвера базы данных при включенном кешировании. НЕ загружайте этот класс вручную.
Важно
Не все запросы доступны при использовании кеширования. Пожалуйста, внимательно прочтите эту страницу.
Включение кеширования
Кеширование вкдючается в три шага:
- Создание каталога для записи на сервере, где файлы кеша могут быть сохранены.
- Установить путь к папке кеша вашего 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 для того чтобы указать что необходимо очистить.