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

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

    Важно

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

    Важно

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

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

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

    • Создание каталога для записи на сервере, где файлы кеша могут быть сохранены.
    • Установить путь к папке кеша вашего 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();