Cache based on Zend_Cache

Каждый топик здесь посвящен конкретной библиотеке или наработкам конкретного проекта

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 КБ) Скачиваний: 630


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

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

Re: Cache based on Zend_Cache

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

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

Re: Cache based on Zend_Cache

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

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

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

Спасибо автору, попробуем в действии.
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 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 - это же просто сериализированый массив...
Зачем использовать, как мне кажется, громозкую либу, если тоже самое можно сделать и "вручную"?

Я вот еще думаю, можен лучше кэшировать страницу целиком, а не только данные? Благо тот шаблонизатор, чтоя использую, это позволяет.
Аватара пользователя
kosenka
 
Сообщения: 59
Зарегистрирован: 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

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

А потом тебе понадобиться на страницы поставить ссылку какую либо или изменить текст в шапке и придеться скидывать весь кеш.
Отвечу на ваши вопросы по CodeIgniter и Kohana3
Благодарности принимаются тут: 41001216991355 (ЯД)
Big_Shark
Модератор
 
Сообщения: 1307
Зарегистрирован: 03 фев 2009, 02:12
Откуда: Владивосток

Re: Cache based on Zend_Cache

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

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

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

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

Re: Cache based on Zend_Cache

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

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

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

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

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

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

И в таком случае вам не придёться потом переписывать код приложения для изменения библиотеки кэширования, просто нужно изменить или написать свой класс для другой библиотеки сохраняя все мотеды и опции.
Coolweb.su
Здесь я слушаю музыку слушать mp3
Аватара пользователя
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
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Cache based on Zend_Cache

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

Спасибо Tovit
Давно, не обновлял её, учту ваши замечания.
Coolweb.su
Здесь я слушаю музыку слушать mp3
Аватара пользователя
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.
А что у вас дальше по сценарию ? Как выводиться информация на страницу?
Coolweb.su
Здесь я слушаю музыку слушать mp3
Аватара пользователя
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
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Cache based on Zend_Cache

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

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

Re: Cache based on Zend_Cache

Сообщение RebelioUS » 03 янв 2012, 20:22

Ну что ж такое то а?

Вот путь к библиотеке зенд кеша.
Код: Выделить всё
//Путь до библиотеки Zend
$config['path_to_zend']  = 'system/application/libraries/Zend/';

// в нервах аж неправильный вариант скопипастил сюда... исправил
 

Что ему не нравиться? Я конечно пробовал все варианты но ведь тут всё и так ясно же. от корня индекс.пхп. до папки зенда.
Даёт ошибку

Fatal error: require_once() [function.require]: Failed opening required 'Zend\Cache\Backend\File.php' (include_path='.;/usr/local/php5/PEAR;Z:\home') in Z:\home\домен\www\system\application\libraries\Zend\Cache.php on line 132

Ну что не так а? Или я отстал от времени и теперь пути по другому прописываються?
З.Ы. Дайте вариант народ, а то башка лопается... :evil:
RebelioUS
 
Сообщения: 219
Зарегистрирован: 25 фев 2011, 05:45

Re: Cache based on Zend_Cache

Сообщение RebelioUS » 03 янв 2012, 21:55

Да ладно вам ребята, ну я же не первый кто это пишет. Не уж то у всех всё так гладко?
RebelioUS
 
Сообщения: 219
Зарегистрирован: 25 фев 2011, 05:45

Re: Cache based on Zend_Cache

Сообщение Tovit » 03 янв 2012, 23:02

Вы действительно думаете, что здесь ТАК быстро реагируют?

https://github.com/deeperton/CI_Applica ... pplication посмотрите здесь, вас интересует конфиг с логичным именем, библиотека с не менее логичным именем, как и папка там же. А этот тред слишком старый.

P.S. откройте для себя мир отладки кода.
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Cache based on Zend_Cache

Сообщение RebelioUS » 03 янв 2012, 23:24

Кажись заработало. Что же было не так ... интЭрЭсно :)
Спасибо Товит ещё раз!
RebelioUS
 
Сообщения: 219
Зарегистрирован: 25 фев 2011, 05:45

Re: Cache based on Zend_Cache

Сообщение RebelioUS » 04 янв 2012, 16:31

Рано я обрадовался. Та же проблема но в новом обличии...

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

Fatal error
:  Uncaught exception 'Zend_Cache_Exception' with message 'cache_dir must be a directory' in Z:\home\domen\www\system\application\libraries\Zend\Cache.php:165
Stack trace
:
#0 Z:\home\domen\www\system\application\libraries\Zend\Cache\Backend\File.php(146): Zend_Cache::throwException('cache_dir must ...')
#1 Z:\home\domen\www\system\application\libraries\Zend\Cache\Backend\File.php(121): Zend_Cache_Backend_File->setCacheDir('Z:\home\domen\...')
#2 Z:\home\domen\www\system\application\libraries\Zend\Cache.php(148): Zend_Cache_Backend_File->__construct(Array)
#3 Z:\home\domen\www\system\application\libraries\zendcache.php(118): Zend_Cache::factory('Core', 'File', Array, Array)
#4 Z:\home\domen\www\system\application\libraries\zendcache.php(98): zendcache->initialize(Array)
#5 Z:\home\domen\www\system\libraries\Loader.php(924): zendcache->__construct(Array)
#6 Z:\home\domen\www\system\libraries\Loader.php(829): CI_Loader->_ci_init_class('Zendcache', '', NULL, NULL)
#7 Z:\home\domen\www\system\libraries\Load in Z:\home\domen\www\system\application\libraries\Zend\Cache.php on line 165
 


Это может быть из за Денвера?
RebelioUS
 
Сообщения: 219
Зарегистрирован: 25 фев 2011, 05:45

След.

Вернуться в Решения, авторский код и библиотеки

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

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