Фреймворки →
Кеширование в Codeigniter при помощи Zend Cache
Codeigniter на столько мощный фреймворк, что приходится пользоваться недофреймфорком Zend Framework, слышал аргумент против Зенд Фреймворка: «это тупо набор классов», скажу, что это нихера не набор классов, а классы в ZF хороши. Поэтому будем пользовать Zend Cache для еширования в Codeigniter.
Во-первых, этот механизм позволяет использовать разные фронтэнды и бэкенды через один API.
Во-вторых, удобное управление кешом, гибкие настройки.
В-третьих, просто потому что он является стабильным и надёжным механизмом кеширования, и его разработкой и поддержкой занимаются профессионалы.
Использование компонента Zend Cache в CodeIgniter неудобно, поэтому решил написать свою библиотеку, которя будет использовать этот механизм кэширования и будет проста в применении с CodeIgniter. Теперь немного опишу своё творение, и расскажу как его применить.
Для начала нужно сконфигурировать библиотеку, для этого нужно создать файл cache.php в /aplication/config/ примерно так:
Здесь все ключи массива должны называться как и в документации Zend Cache. Все значения в примере данного конфига демонстрационные, вы сами должны подобрать необходимые для себя параметры.
Теперь библиотека настроена и можно перейти к её применению.
Для загрузки используем уже знакомый нами метод:
В первом примере, мы кэшируем целый массив, это возможно если в настройках фронтенда параметр 'automatic_serialization' учтановлен в true.
В таком случае мы можем сохранить в кэш данные примо из базы данных или сразу из нескольких баз данных, либо перед их кэшированием можно как то их обработать что бы не тратить ресурсы сервера потом. Таким образом мы избавляемся от запросов к базе данных (в данном случае двух) и вместо этого подгружаем файл, что выполняется быстрее.
Во втором примере мы видим что кэшируется уже не массив с данными а целая часть страницы. Такой метод позволяет кэшировать данные которые не требуют частого обновления (например список категорий на странице, облако тэгов и т.д.) либо генерация этих данных очень ресурсоёмка и имеет смысл сохранить их на небольшой промежуток времени. И в данном случае опцию 'automatic_serialization' не обязательно устанавливать в true.
В примере №3 показаны способы удаления кэша который мы создали ранее, в примерах 1 и 2. Но заметьте сделать что это можно сделать разными способами.
С помощью первого метода можно удалить кэш по его уникальному имени, с помощью второго и третьего метода мы сделаем тоже самое но используя ни его имя, а тэги которые были присвоены кэшу. Это позволяет удобно управлять кэшем, например можно удалить кэш категорий только с определённой страницы, задав при сохранении определённые тэги.
Подробную информацию о том для чего определённые настройки и описание бэкендов и фронтэндов не приводил т.к. эта информация есть на русском языке в документации к Zend Cache.
Скачать:
CI-ZendCache.zip
Во-первых, этот механизм позволяет использовать разные фронтэнды и бэкенды через один API.
Во-вторых, удобное управление кешом, гибкие настройки.
В-третьих, просто потому что он является стабильным и надёжным механизмом кеширования, и его разработкой и поддержкой занимаются профессионалы.
Использование компонента Zend Cache в CodeIgniter неудобно, поэтому решил написать свою библиотеку, которя будет использовать этот механизм кэширования и будет проста в применении с CodeIgniter. Теперь немного опишу своё творение, и расскажу как его применить.
Пример применения библиотеки
Для начала нужно сконфигурировать библиотеку, для этого нужно создать файл cache.php в /aplication/config/ примерно так:
//Путь до библиотеки Zend
$config['path_to_zend'] = '';
//Название фронтэнда
$config['frontend'] = 'Core';
//Название бэкэнда
$config['backend'] = 'File';
//Опции фронтэнда
$config['frontendOption'] = array(
'lifetime' => null,
'automatic_cleaning_factor' => 0,
'automatic_serialization' => true
);
//Опции бэкэнда
$config['backendOption'] = array(
'cache_dir' => APPPATH.'cache/',
'read_control_type' => 'strlen',
'file_locking' => false,
'hashed_directory_level' => 0,
'file_name_prefix' => 'cache'
);
$config['path_to_zend'] = '';
//Название фронтэнда
$config['frontend'] = 'Core';
//Название бэкэнда
$config['backend'] = 'File';
//Опции фронтэнда
$config['frontendOption'] = array(
'lifetime' => null,
'automatic_cleaning_factor' => 0,
'automatic_serialization' => true
);
//Опции бэкэнда
$config['backendOption'] = array(
'cache_dir' => APPPATH.'cache/',
'read_control_type' => 'strlen',
'file_locking' => false,
'hashed_directory_level' => 0,
'file_name_prefix' => 'cache'
);
Здесь все ключи массива должны называться как и в документации Zend Cache. Все значения в примере данного конфига демонстрационные, вы сами должны подобрать необходимые для себя параметры.
Теперь библиотека настроена и можно перейти к её применению.
Для загрузки используем уже знакомый нами метод:
$this->load->library('Cache');
Пример 1:
if ( ! $end = $this->cache->load('name_ceche') ) {
$blog = $this->db->get("blog");
$category = $this->db->get("category");
$end['content'] = $blog->result();
$end['category'] = $category->result();
$this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}
$blog = $this->db->get("blog");
$category = $this->db->get("category");
$end['content'] = $blog->result();
$end['category'] = $category->result();
$this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}
В первом примере, мы кэшируем целый массив, это возможно если в настройках фронтенда параметр 'automatic_serialization' учтановлен в true.
В таком случае мы можем сохранить в кэш данные примо из базы данных или сразу из нескольких баз данных, либо перед их кэшированием можно как то их обработать что бы не тратить ресурсы сервера потом. Таким образом мы избавляемся от запросов к базе данных (в данном случае двух) и вместо этого подгружаем файл, что выполняется быстрее.
Пример 2:
if ( ! $end = $this->cache->load('name_ceche') ) {
$blog = $this->db->get("blog");
$data['content'] = $blog->result();
$end = $this->load->view('myfile', $data, true);
$this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}
$blog = $this->db->get("blog");
$data['content'] = $blog->result();
$end = $this->load->view('myfile', $data, true);
$this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}
Во втором примере мы видим что кэшируется уже не массив с данными а целая часть страницы. Такой метод позволяет кэшировать данные которые не требуют частого обновления (например список категорий на странице, облако тэгов и т.д.) либо генерация этих данных очень ресурсоёмка и имеет смысл сохранить их на небольшой промежуток времени. И в данном случае опцию 'automatic_serialization' не обязательно устанавливать в true.
Пример 3:
$this->cache->remove('name_ceche');
$this->cache->clean('page1');
$this->cache->clean('blog');
$this->cache->clean('page1');
$this->cache->clean('blog');
В примере №3 показаны способы удаления кэша который мы создали ранее, в примерах 1 и 2. Но заметьте сделать что это можно сделать разными способами.
С помощью первого метода можно удалить кэш по его уникальному имени, с помощью второго и третьего метода мы сделаем тоже самое но используя ни его имя, а тэги которые были присвоены кэшу. Это позволяет удобно управлять кэшем, например можно удалить кэш категорий только с определённой страницы, задав при сохранении определённые тэги.
Подробную информацию о том для чего определённые настройки и описание бэкендов и фронтэндов не приводил т.к. эта информация есть на русском языке в документации к Zend Cache.
Скачать:
CI-ZendCache.zip




Появилось руководство пользователя на русском языке для версии 2.0.0
http://codeigniter.su
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.