4

有没有办法在 Zend_db 中缓存结果集?例如,我想使用 Zend_db 运行一个选择查询,并希望这个查询被缓存以便以后能够更快地运行它。

4

2 回答 2

4

我的建议是在 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.
}
于 2012-08-13T12:56:55.313 回答
2

当你想保存结果集时,你可以使用 Zend_Cache。

Zend_Db 本身不做任何结果集缓存。留给您以特定于应用程序的方式执行此操作,因为框架无法知道哪些结果集出于性能原因需要缓存,而哪些结果集因为您需要它们是绝对最新的而无法缓存。这些是只有您作为应用程序开发人员知道的标准。

只是在谷歌上搜索“zend_db 缓存结果”,第一个匹配是这个博客,展示了如何使用 Zend_Cache 对象来保存数据库查询结果: Zend Framework:: Caching the database query results

于 2012-02-04T22:06:51.843 回答