Cache based on Zend_Cache

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

Cache based on Zend_Cache

Сообщение Ladygin 21 окт 2008, 21:08

Кэширование с помощью Zend_Cache для CI.

Папку с Zend'ом кидайте в aplication/libraries/Zend/...
Все возможности Zend_Cache сохранены, можно почитать здесь http://framework.zend.com/manual/ru/zend.cache.html
Может быть кому то пригодится.

Cache.rar
Cache based on Zend_Cache
(2.38 KiB) Скачиваний: 473


Пример:
Код: Выделить всё

$this
->load->library('Cache');
if ( !
$configs $this->cache->load('config') ) {
            
     
Выполняем различные действия и передаём переменной $configs для сохранения.
            
     
$this->cache->save($configs'config', array('settings''config'));
Аватара пользователя
Ladygin
 
Сообщения: 72
Зарегистрирован: 30 май 2008, 06:13
Откуда: Псков

Re: Cache based on Zend_Cache

Сообщение Sam Dark 22 окт 2008, 13:57

Может сразу приложить бэкенды?
Аватара пользователя
Sam Dark
 
Сообщения: 788
Зарегистрирован: 16 апр 2008, 19:23
Откуда: Воронеж

Re: Cache based on Zend_Cache

Сообщение Tovit 14 ноя 2008, 18:12

как раз не стоит... Опытные программисты наверняка его имеют, а другим полезно будет.

Лично я, не знаючи Zend Framework потратил время на разгребание что к чему... и не могу сказать, что пожалел об этом. Хотя бы потому, что я раньше игнорировал Зендовский фреймвёрк считая его слишком громоздким и не поворотливым, но там есть очень даже интересные решения....

Спасибо автору, попробуем в действии.
Фантазия! Фантазия! Она поможет... не форум!
Иногда, изобретать велосипеды -- это интересно, тем более, если большинство чужих велосипедов засекречены.
Аватара пользователя
Tovit
 
Сообщения: 413
Зарегистрирован: 15 фев 2009, 17:18

Re: Cache based on Zend_Cache

Сообщение pirrat 14 ноя 2008, 23:56

Спасибо, уже начал использовать в одном из проектов!
CI(3проекта) -> Kohana (5 проектов) -> Yii (0)
pirrat
 
Сообщения: 114
Зарегистрирован: 02 фев 2009, 21:09

Re: Cache based on Zend_Cache

Сообщение kosenka 15 ноя 2008, 00:45

Может я, конечно, чего-то и не понимаю, но посмотрел сейчас в каком виде хранится кэш генерируемый zend_cache - это же просто сериализированый массив...
Зачем использовать, как мне кажется, громозкую либу, если тоже самое можно сделать и "вручную"?

Я вот еще думаю, можен лучше кэшировать страницу целиком, а не только данные? Благо тот шаблонизатор, чтоя использую, это позволяет.
Изучаю CI 1.7.0
Аватара пользователя
kosenka
 
Сообщения: 57
Зарегистрирован: 07 ноя 2008, 04:13

Re: Cache based on Zend_Cache

Сообщение pirrat 15 ноя 2008, 01:17

ну посмотрите все возможности библиотеки и ещё раз подумайте стоит ли применять или нет...
Бэкэнды, которые есть в ZEND, по мимо хранение информации в файле, имеют возможность хранить данные в памяти , в базах Sqlite, с использованием альтернативного кэша PHP
Фронтэнды позволяют кэшировать многие типы данных: строки, массивы, объекты, вызовы функций, файлы(с отслеживанием их изменения), выходные данные(отдельные блоки вывода), целые страницы.

Возможно большинство из этого может и не пригодится, но ZEND тем и хорош, что его библиотеки покрывают большую, если не весь фронт возможных задач!

Если вы уверенны, что кроме хранения сереализованных массивов данных в файлах, вам больше ни чего не надо, то конечно проще наверно самому написать, но представте такую ситуацию , что проект приобрел очень большую популярность, и файловый кэш перестал эффективно работать, решение - хранить инфу в оперативной памяти(использовать memcache), в случае с ZEND вам всего лишь понадобится сменить Бэкэнд, а в случае с собственной библиотекой писать свой класс или искать готовый для работы с memcache, а в худшем случае ещё и делать рефакторинг кода, если ваша библиотека за ранее не была написана с учетом такой ситуации...

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

Все зависит от ситуации, если вся страница представляет из себя один статичный блок, который может иногда меняться, но полностью, то можно и всю!
А представим страницу с новостью, у которой есть комментарии,рейтинг и тд... Саму новость можно конечно закэшировать, и обновлять кэш только при её изменении, но у нас то есть ещё комментарии,рейтинг и тд, а их кэшировать нельзя,так как они постоянно изменяются... (можно конечно постоянно обновлять кэш при каком либо изменении, но мне кажется тогда смысл кэша пропадет...)
CI(3проекта) -> Kohana (5 проектов) -> Yii (0)
pirrat
 
Сообщения: 114
Зарегистрирован: 02 фев 2009, 21:09

Re: Cache based on Zend_Cache

Сообщение Big_Shark 15 ноя 2008, 04:25

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

А потом тебе понадобиться на страницы поставить ссылку какую либо или изменить текст в шапке и придеться скидывать весь кеш.
Big_Shark
 
Сообщения: 754
Зарегистрирован: 03 фев 2009, 02:12

Re: Cache based on Zend_Cache

Сообщение kosenka 15 ноя 2008, 04:58

Big_Shark писал(а):
Я вот еще думаю, можен лучше кэшировать страницу целиком, а не только данные? Благо тот шаблонизатор, чтоя использую, это позволяет.

А потом тебе понадобиться на страницы поставить ссылку какую либо или изменить текст в шапке и придеться скидывать весь кеш.

Согласен.
Ну что ж, буду тогда кешировать данные. И пока оставлю кеширование на zend_cache, а дальше видно будет.
Изучаю CI 1.7.0
Аватара пользователя
kosenka
 
Сообщения: 57
Зарегистрирован: 07 ноя 2008, 04:13

Re: Cache based on Zend_Cache

Сообщение Ladygin 15 ноя 2008, 12:53

pirrat - верно подметил:
Если вы уверенны, что кроме хранения сереализованных массивов данных в файлах, вам больше ни чего не надо, то конечно проще наверно самому написать, но представте такую ситуацию , что проект приобрел очень большую популярность, и файловый кэш перестал эффективно работать, решение - хранить инфу в оперативной памяти(использовать memcache), в случае с ZEND вам всего лишь понадобится сменить Бэкэнд, а в случае с собственной библиотекой писать свой класс или искать готовый для работы с memcache, а в худшем случае ещё и делать рефакторинг кода, если ваша библиотека за ранее не была написана с учетом такой ситуации...

Для этого собственно и была выбрана эта библиотека.

Может я, конечно, чего-то и не понимаю, но посмотрел сейчас в каком виде хранится кэш генерируемый zend_cache - это же просто сериализированый массив...
Зачем использовать, как мне кажется, громозкую либу, если тоже самое можно сделать и "вручную"?

Не обязательное делать сериалзацию кэшированных данных, можно изменять в настройках.

Ну что ж, буду тогда кешировать данные. И пока оставлю кеширование на zend_cache, а дальше видно будет.

И в таком случае вам не придёться потом переписывать код приложения для изменения библиотеки кэширования, просто нужно изменить или написать свой класс для другой библиотеки сохраняя все мотеды и опции.
Аватара пользователя
Ladygin
 
Сообщения: 72
Зарегистрирован: 30 май 2008, 06:13
Откуда: Псков

Re: Cache based on Zend_Cache

Сообщение Tovit 11 янв 2009, 12:46

Столкнулся с проблемой -- есть глобальные настройки длительности хранения кеша, с ними все в порядке, но функция save принимает последний не обязательный параметр дающий возможность указать специальное значение длительности хранения.
Код: Выделить всё
   /**
     * Save some data in a cache
     * 
     * @param mixed $data data to put in cache (can be another type than string if automatic_serialization is on)
     * @param cache $id cache id (if not set, the last cache id will be used)
     * @param array $tags cache tags
     * @param int $specificLifetime if != false, set a specific lifetime for this cache record (null => infinite lifetime)
     * @return boolean true if no problem
     */
 

Как я понимаю пояснения. Если указать false -- будет использовано значение из кофига, если указать null, то эта запись не будет удаляться.
Далее... в коде библиотеки заголовок функции указывает значение по умолчанию null, т.е. бесконечное хранение, тогда как в коде самого Zend'а указывается false, что более логично.
Это первый вопрос -- почему библиотека переопределяет значение по умолчанию оригинального кода?
Данный вызов из библиотеки, судя по всему вообще запрещает использовать бесконечное кеширование.
Код: Выделить всё
public function save($data, $id, $tags = array(), $time = NULL) {
        if ( $time != NULL ) {
            $specificLifetime = $time; 
        
}
        return $this->Zend->save($data, $id, $tags, $specificLifetime = false);
}
 


Вот этот вариант работает более правильно (срабатывает и отдельные настройки и бесконечное хранение, функция расположена начиная с 189 строки в оригинальной библиотеке):
Код: Выделить всё
public function save($data$id$tags = array(), $time false) {
        return 
$this->Zend->save($data$id$tags$time);
}
  
Фантазия! Фантазия! Она поможет... не форум!
Иногда, изобретать велосипеды -- это интересно, тем более, если большинство чужих велосипедов засекречены.
Аватара пользователя
Tovit
 
Сообщения: 413
Зарегистрирован: 15 фев 2009, 17:18

Re: Cache based on Zend_Cache

Сообщение Ladygin 12 янв 2009, 20:07

Спасибо Tovit
Давно, не обновлял её, учту ваши замечания.
Аватара пользователя
Ladygin
 
Сообщения: 72
Зарегистрирован: 30 май 2008, 06:13
Откуда: Псков

Re: Cache based on Zend_Cache

Сообщение allwebmailru 03 ноя 2009, 15:50

Здравствуйте, подскажите пожалуйста может кто сталкивался.
Пишу
Код: Выделить всё
 if ( ! $end $this->cache->load('registration') ) {
           
$this->load->library('validation');
           
$this->load->model('model_user_register');
           
$this->load->model('model_get_list');
           
$data['title'] = _REGISTRATION.' - '._TITLE;
           
$data['keywords'] =_REGISTRATION;
           
$data['description'] = _REGISTRATION_DESCRIPTION;
           
$data['js'] = 'register';
           
$data['body'] = 'view_register';
           
$country_list=$this->model_get_list->getCountryList();
           
$data['country_list']=$country_list;
           
$territory_list=$this->model_get_list->getTerritotyList(1);
           
$data['territory_list']=$territory_list;
           
$end $this->load->view('view_template_main'$datatrue);
           
$this->cache->save($end'registration', array('page1''blog'),1000);
       } 

Кэш в папку ложится (два файла 1 - mycms---internal-metadatas---registration, 2 - mycms---registration), но подгружается пустая страница.
allwebmailru
 
Сообщения: 1
Зарегистрирован: 03 ноя 2009, 15:47

Re: Cache based on Zend_Cache

Сообщение Ladygin 04 ноя 2009, 11:10

Здравствуйте, allwebmailru.
А что у вас дальше по сценарию ? Как выводиться информация на страницу?
Аватара пользователя
Ladygin
 
Сообщения: 72
Зарегистрирован: 30 май 2008, 06:13
Откуда: Псков

Re: Cache based on Zend_Cache

Сообщение Tovit 05 ноя 2009, 22:24

Думаю, кому-то может пригодиться, чуть-чуть дополнил метод сохранения.
Через параметр времени хранения можно передать конструкцию вроде 'x4', что будет означать установку времени жизни в 4 раза большее чем указано в настройках кеша. Такое часто бывает для явно долгосрочных данных, но для которых, все же, нельзя ставить бесконечное время хранения.
Код: Выделить всё
public function save($data$id$tags = array(), $time false) {
        
$id preg_replace('/[^a-z0-9_]/i' '_'$id); //на всякий случай проверяем переданное имея записи на отсутствие запрещенных символов.
        
if(strpos($time'x') === 0){
            
$time $this->frontendOption['lifetime'] * (int)substr($time1);
        }
        return 
$this->Zend->save($data$id$tags$time);
    }
 
Фантазия! Фантазия! Она поможет... не форум!
Иногда, изобретать велосипеды -- это интересно, тем более, если большинство чужих велосипедов засекречены.
Аватара пользователя
Tovit
 
Сообщения: 413
Зарегистрирован: 15 фев 2009, 17:18

Re: Cache based on Zend_Cache

Сообщение rarr 17 авг 2010, 00:07

Что-то не получается установить ..
пишет: Failed opening required 'Zend/Cache.php' ... перепробывал все варианты путей к библиотеке. Кто сталкивался с этим?
rarr
 
Сообщения: 15
Зарегистрирован: 02 июл 2010, 22:42


Вернуться в Авторский код и библиотеки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0