Конфигурация интерфейса кэша Zend

Zend_Cache can be configured to cache several types of output, including the results of function calls, the results of object and static method calls, entire pages, and configuration data. 

Учитывая этот контроллер и связанные с ним взгляды, как бы вы шли с кешированием? Из того, что некоторые из вас предложили здесь (см. @marcin), я понял, что очистка всего кеша только за один комментарий или пост-обновление будет слишком много. Как я должен идти за ними отдельно?

В основном у меня есть страница блога, где я загружаю все сообщения с относительными комментариями пользователей.

-Индексный контроллер (домашняя страница):

 class IndexController extends Zend_Controller_Action { public function indexAction() { //Post is a db_table model $post_manager=new Post(); $allPosts=$post_manager->getAllPosts(); $this->view->posts=$allPosts; } 

}

-index.phtml:

 echo $this->partialLoop('_posts.phtml',$this->posts); 

-_posts.phtml:

 echo $this->object->title; echo $this->object->text; echo $this->partialLoop('_comments.phtml',$this->object->getComments()); 

-_comments.phtml:

 echo $this->object->text; 

Пожалуйста, опубликуйте практические примеры

еще раз спасибо

Извините, я не повторил ранее. Быстро, я хотел бы представить один из способов поймать это для вашего рассмотрения. Для простоты я просто сконцентрируюсь на кэшировании ваших выходов с использованием интерфейса вывода.

В вашем приложении application.ini вы можете настроить захват следующим образом:

 resources.cachemanager.myviewcache.frontend.name = Output resources.cachemanager.myviewcache.frontend.customFrontendNaming = false resources.cachemanager.myviewcache.frontend.options.lifetime = 7200 resources.cachemanager.myviewcache.frontend.options.caching = true resources.cachemanager.myviewcache.frontend.options.automatic_serialization = true resources.cachemanager.myviewcache.backend.name = Apc 

Обратите внимание, что я использую Apc в качестве бэкэнд. Вы можете использовать файловую систему, если у вас нет или нет Apc.

При этом я буду кэшировать ваши сообщения и комментарии отдельно. Например, в _posts.phtml вы можете сделать что-то похожее на следующее:

 // first cache an output related to the body of your post with key being associated // with your post. if (!($this->viewCache()->start('post_' . (string) $this->object->post_id))) { echo $this->object->title; echo $this->object->text; } // now I cache an output of a comments associated with a give post if (!($this->viewCache()->start('post_comments_' . (string) $this->object->post_id))) { echo $this->partialLoop('_comments.phtml',$this->object->getComments()); } 

В этом примере помощник viewCache () выглядит следующим образом:

 class My_View_Helper_ViewCache extends Zend_View_Helper_Abstract { /** * * @return Zend_Cache_Frontend_Output */ public function viewCache() { return Zend_Registry::get('outputCache'); } } 

В то время как я устанавливаю outputCache в реестр в Bootstrap.php:

 protected function _initPutChachesIntoRegistry() { $this->bootstrap('cachemanager'); $cacheManager = $this->getResource('cachemanager'); Zend_Registry::set('outputCache', $cacheManager->getCache('myviewcache')); } 

Обратите внимание, что кеши связаны с ключами, которые, в свою очередь, относятся к данному сообщению и его комментариям. При этом, когда вы получите новый комментарий, вы просто сбросите кеш, связанный с данным сообщением. Например, в действии вы можете удалить кеш комментариев для сообщения с $ post_id = 5 следующим образом:

 $this->view->viewCache()->remove('post_comments_' . $post_id); 

Надеюсь, что это поможет вам или, по крайней мере, даст вам некоторые идеи, как это сделать.

Я не знаю, как сделать лучше, но вы можете так:

Записать плагин , который будет отвечать на кеш контроллера, используя postDispatch , и восстановить его, если он в кеше, используя preDispatch