2011-06-07 31 views
3

假设您有这种情况:一个简单的博客主页,加载静态内容以及动态内容。 静态内容由很少变化的图片组成。我还拥有数据库驱动的动态内容。动态内容包含您的所有博客文章(文本和图片)以及相关用户的评论。动态内容会每隔一小时定期更新一次到每一天。Zend如何使用缓存组件

你将如何去缓存?特别是假设用户正在发表评论或管理员正在添加/编辑帖子给你想要手动触发缓存清除,让这个博客的更新版本主页 - 页?

感谢您的耐心配合。

卢卡

再次感谢

回答

4

因此,@mingos显示缓存的基本用法。他谈到了通用缓存,这很好。然而,ZF几乎没有什么不同的缓存机制可以用于不同的事情。您不需要限制一种类型的缓存。你可以使用它们的混合物。例如,为了缓存您的静态内容Zend_Cache_Frontend_Page将是值得考虑的,因为它会生成静态页面的完整html文件。如果你有很多配置文件,例如long routes.ini或其他,你可以使用Zend_Cache_Frontend_File来缓存它们。有了这个,你可以节省解析每个请求的ini文件的时间。您的意见中的重要部分可以使用Zend_Cache_Frontend_Output等缓存。

要缓存什么和何时更新缓存是一个棘手的问题。这完全取决于您的内容改变的速度和频率。例如,如果每秒钟有100条新评论,则每秒清除评论缓存100次是没有意义的(即对于每条新评论)。最好是将每个帖子的评论与其他帖子的评论分开缓存。然后,您将清理/刷新仅与此帖子关联的缓存。

0

一个简单的缓存是一个超时定义的一段时间后。这使得缓存层简单易用。 Zend Manual has more information on caching basics

但是实时信息和缓存信息是两个世界。如果你需要实时的话,不要缓存。

如果你让缓存层太复杂,你可以销毁你的整个应用程序。

7

首先,一个链接: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'); 

这很简单,只需阅读文档。写得很好。

5

Zend的缓存提供了一个非常简单的方法来存储在缓存中的数据,并提高速度。 Zend使用前端和后端进行缓存。前端对访问或操作缓存很有用。后端存储数据有用的文件,内存缓存时,SQLite等

首先初始化主音并通过引导文件中创建的功能引导文件的支持。

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); 
} 

首先在上面的代码中我们得到了缓存数组。现在,如果未设置结果1,则缓存完成意味着文件在您在后端数组中定义的路径中生成。

对于下一次页面加载,将从缓存数据存储所在的文件中检索数据。

您可以检查该文件按照定义的路径。

在该文件中的数据是JSON格式。