Zend, как использовать компонент кэша - PullRequest
3 голосов
/ 07 июня 2011

Допустим, у вас есть такой сценарий: простая домашняя страница блога, которая загружает как статический, так и динамический контент.Статический контент состоит из изображений, которые редко меняются. У меня также есть динамический контент на основе базы данных. Динамический контент состоит из всех ваших сообщений в блоге (текстовых и графических) и комментариев соответствующих пользователей. Динамический контент периодически меняется с каждым часом докаждый день.

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

спасибо за ваше терпение.

Luca

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

Ответы [ 4 ]

9 голосов
/ 07 июня 2011

Сначала ссылка: 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');

Это довольно просто, просто прочитайте документацию. Это хорошо написано.

6 голосов
/ 27 декабря 2013

Zend кеш обеспечивает очень простой способ хранения данных в кеше и увеличения скорости. Zend использует фронтэнд и бэкэнд для кеширования. Внешний интерфейс полезен для доступа к кэш-памяти или для ее работы. Бэкэнд полезен для хранения данных в File, memcache, Sqlite и т. Д.

Прежде всего инициализируйте внешний и резервный файлы в файле начальной загрузки, создав функцию on в файле начальной загрузки.

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 универсального типа. Параметр файла предназначен для определения средства хранения кеша, где следует хранить записи кеша, затем второе и четвертое - для внешнего интерфейса и внутреннего интерфейса.

Теперь зарегистрируйте этот кеш-массив с помощью Zend Registry, чтобы вы могли использовать его в любом контроллере, модели и т. Д.

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

    $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.

4 голосов
/ 07 июня 2011

Итак, основное использование кеша показано @mingos.Он говорит об общем кеше, что хорошо.Тем не менее, ZF имеет несколько различных механизмов кэширования, которые вы можете использовать для разных целей.Вам не нужно ограничивать себя одним типом кэша.Вы можете использовать их смесь.Например, для кэширования вашего статического контента Zend_Cache_Frontend_Page стоит подумать, так как он генерирует полный html-файл ваших статических страниц.Если у вас много конфигурационных файлов, например, длинных маршрутов .ini или чего-то еще, вы можете кэшировать их, используя Zend_Cache_Frontend_File.При этом вы сэкономите время при разборе INI-файлов для каждого запроса.Значительные части ваших представлений могут быть кэшированы с использованием Zend_Cache_Frontend_Output и т. Д.

Что кешировать и когда обновлять кеш - сложный вопрос.Все зависит от того, как быстро и как часто меняется ваш контент.Например, если у вас около 100 новых комментариев в секунду, нет смысла очищать кэш комментариев 100 раз в секунду (т.е. для каждого нового комментария).Возможно, было бы лучше иметь комментарии для каждого поста в кэше отдельно от комментариев других постов.Затем вы очистите / обновите кеш, связанный только с этим сообщением.

0 голосов
/ 07 июня 2011

Простой кэш - это тайм-аут, истекающий по истечении определенного периода времени.Это делает слой кэширования простым и легким в реализации. Zend Manual содержит больше информации об основах кэширования .

Однако информация в режиме реального времени и информация из кэша - это два мира.Если вам нужно в реальном времени, не кэшируйте.

Если вы сделаете слой кэширования слишком сложным, вы можете уничтожить все ваше приложение.

...