Zend_db кеширование - PullRequest
       31

Zend_db кеширование

4 голосов
/ 05 февраля 2012

Есть ли способ кэширования наборов результатов в Zend_db?Например, я хочу выполнить запрос на выборку с использованием Zend_db и хочу, чтобы этот запрос был кэширован, чтобы позже он мог выполняться быстрее.

Ответы [ 2 ]

4 голосов
/ 13 августа 2012

Мой совет - создайте метод инициализации в Bootstrap.php с префиксом "_init". Например:

/**
 * 
 * @return Zend_Cache_Manager 
 */
public function _initCache()
{
    $cacheManager = new Zend_Cache_Manager();
    $frontendOptions = array(
        'lifetime' => 7200, // cache lifetime of 2 hours
        'automatic_serialization' => true
    );
    $backendOptions = array(
        'cache_dir' => APPLICATION_PATH . '/cache/zend_cache'
    );
    $coreCache = Zend_Cache::factory(
                'Core', 
                'File', 
                $frontendOptions, 
                $backendOptions
            );
    $cacheManager->setCache('coreCache', $coreCache);
    $pageCache = Zend_Cache::factory(
            'Page', 
            'File', 
            $frontendOptions, 
            $backendOptions
    );
    $cacheManager->setCache('pageCache', $pageCache);

    Zend_Registry::set('cacheMan', $cacheManager);
    return $cacheManager;
}

Таким образом, вы создали и внедрили в свой менеджер кэша те кэши, которые вам нужны в вашем приложении. Теперь вы можете использовать этот объект кэша, где вы хотите использовать. Например, в вашем контроллере или где-либо еще:

/**
 *
 * @return boolean |SimplePie
 */
public function getDayPosts() 
{
    $cacheManager =  Zend_Registry::get('cacheMan');
    $cache = $cacheManager->getCache('coreCache');
    $cacheID = 'getDayPosts';

    if (false === ($blog = $cache->load($cacheID))) {
        $blog = Blog::find(array('order' => 'rand()', 'limit' => 1));
        $cache->save($blog, $cacheID);
    }
    // do what you want to do with the daya you fetched.
}
2 голосов
/ 05 февраля 2012

Вы можете использовать Zend_Cache, когда хотите сохранить наборы результатов.

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

Просто поиск в Google "результатов кэша zend_db". Первое совпадение - это блог, показывающий, как использовать объект Zend_Cache для сохранения результата запроса базы данных: Zend Framework:: Кэширование результатов запроса к базе данных

...