Предположим, у вас есть такой сценарий: простая домашняя страница блога, которая загружает как статический контент, так и динамический контент. Статический контент состоит из изображений, которые редко меняются. У меня также есть динамический контент с динамическим содержимым. Динамический контент состоит из всех ваших сообщений в блоге (текст и изображение) и связанных с ними комментариев пользователей. Динамический контент периодически меняется с каждого часа до каждый день.
Как вы идете с кешированием? И, в частности, если пользователь оставляет комментарий или администратор добавляет / редактирует сообщение, вам нужно вручную запустить очистку кеша, чтобы иметь версию обновления этой домашней страницы блога?
Спасибо за ваше терпение.
Лука
еще раз спасибо
Таким образом, основное использование кеша показано @mingos. Он говорит об общем кеше, что хорошо. Однако у ZF есть несколько различных механизмов кэширования, которые вы можете использовать для разных вещей. Вам не нужно ограничивать себя для одного типа кеша. Вы можете использовать их смесь. Например, для кэширования вашего статического содержимого заслуживает внимания Zend_Cache_Frontend_Page , поскольку он будет генерировать полный html-файл ваших статических страниц. Если у вас много конфигурационных файлов, например long routes.ini или что-то еще, вы можете кэшировать их с помощью Zend_Cache_Frontend_File
. С этим вы сэкономите время на разбор файлов ini для каждого запроса. Значительные части ваших представлений можно кэшировать с помощью Zend_Cache_Frontend_Output
и т. Д.
Что кэшировать, а когда обновлять кеш – непростой вопрос. Все зависит от того, насколько быстро и как часто меняется ваш контент. Например, если у вас есть 100 новых комментариев в секунду, нет смысла чистить ваш кеш комментариев 100 раз в секунду (т. Е. Для каждого нового комментария). Было бы лучше, может быть, иметь комментарии для каждого сообщения, кэшированные отдельно от комментариев других сообщений. Затем вы будете очищать / обновлять кеш, связанный только с этим сообщением.
Во-первых, ссылка: http://framework.zend.com/manual/1.11/en/zend.cache.html
В основном, вам нужно настроить механизм кэширования, а затем вручную вызвать его, когда вы хотите извлечь что-то из кеша.
В бутстрапе у меня может быть этот код:
public function _initCache () { $cache = Zend_Cache::factory( 'Core', 'File', array( 'lifetime' => 3600 * 24, //cache is cleaned once a day 'automatic_serialization' => true ), array('cache_dir' => APPLICATION_PATH.'/cache') ); Zend_Db_Table_Abstract::setDefaultMetadataCache($cache); //cache database table schemata metadata for faster SQL queries Zend_Registry::set('Cache', $cache); }
Затем вы можете использовать функции load () и save () для управления кешем. Пример моего контроллера:
$cache = Zend_Registry::get('Cache'); if (!$this->menu = $cache->load('main_menu')) { $model = new Model_Menu(); $this->menu = $model->get(); $cache->save($this->menu,'main_menu'); }
Здесь я проверяю, кэшируется ли ключ «main_menu». Если подсчет кеша засчитывается, основное меню генерируется и кэшируется.
Если я отредактирую главное меню, я захочу также восстановить кеш. Я просто называю это:
Zend_Registry::get('Cache')->remove('main_menu');
Это довольно просто, просто прочитайте документацию. Это хорошо написано.
Кэш Zend обеспечивает очень простой способ хранения данных в кеше и для увеличения скорости. Zend использует интерфейс и конец для кэширования. Передняя часть полезна для доступа к кешу или управления им. Задний конец полезен для хранения данных в файле, memcache, Sqlite и т. Д.
Прежде всего, инициализируйте фронт и поддерживайте файл bootstrap, создав функцию в файле начальной загрузки.
protected function _initCache(){ $frontend= array( 'lifetime' => 7200, 'automatic_serialization' => true ); $backend= array( 'cache_dir' => '../application/tmp/', ); $cache = Zend_Cache::factory('core', 'File', $frontend, $backend ); Zend_Registry::set('cache',$cache); }
Затем используйте фабрику кэша zend для определения объекта кеша. Ядро параметра определяет ключ ядра кэш-памяти zend общего типа. Параметр File – это определение средства хранения кэш-памяти, в котором хранить записи кеша, а затем во-вторых, для интерфейса и бэкэнд.
Теперь зарегистрируйте этот массив кеша, используя реестр zend, чтобы вы могли использовать его в любом контроллере, модели и т. Д.
Определите код ниже в любом контроллере или любой модели, где вы хотите использовать кеширование данных.
$result1 =””; $cache = Zend_Registry::get('cache'); if(!$result1 = $cache->load('mydata')) { echo 'caching the data…..'; $data=array(1,2,3); $cache->save($data, 'mydata'); } else { echo 'retrieving cache data…….'; Zend_Debug::dump($result1); }
Прежде всего в приведенном выше коде мы получаем массив кеша. Теперь, если результат не задан, кеширование завершено означает, что файл генерируется на пути, который вы определяете во внутреннем массиве
Для загрузки следующей временной страницы эти данные извлекаются из файла, в котором хранится хранилище данных кеширования.
Вы можете проверить файл в соответствии с определенным путем.
В этом файле данные находятся в формате json.
Простой кеш – это тот, который истекает через определенный период времени. Это упрощает и упрощает процесс кэширования. Руководство Zend содержит дополнительную информацию об основах кэширования .
Однако информация в реальном времени и кэшированная информация – это два мира. Если вам нужно в реальном времени, не кешируйте.
Если уровень кэширования слишком сложный, вы можете уничтожить все свое приложение.