Zend如何使用缓存组件

luc*_*uca 3 php zend-framework cache-control

假设你有这种情况:一个简单的博客主页,它既可以加载静态内容,也可以加载动态内容.静态内容由很少变化的图像组成.我还有数据库驱动的动态内容.动态内容包含所有博客文章(文本和图像)和相关用户评论.动态内容定期从每小时变化到每天.

您将如何使用缓存?特别是假设用户正在发表评论或管理员正在添加/编辑帖子,您希望手动触发缓存清除以获得此博客主页的更新版本?

谢谢你的耐心.

卢卡

再次感谢

min*_*gos 9

首先,链接:http://framework.zend.com/manual/1.11/en/zend.cache.html

基本上,您需要做的是设置缓存机制,然后在想要从缓存中检索内容时手动调用它.

在bootstrap中,我可能有这个代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用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');
}
Run Code Online (Sandbox Code Playgroud)

在这里,我检查密钥"main_menu"是否被缓存.如果对缓存未命中进行评分,则生成并缓存主菜单.

如果我编辑主菜单,我也想重新生成缓存.我简单地称之为:

Zend_Registry::get('Cache')->remove('main_menu');
Run Code Online (Sandbox Code Playgroud)

这很简单,只需阅读文档即可.写得很好.


小智 6

Zend缓存提供了一种在缓存中存储数据并提高速度的非常简单的方法.Zend使用前端和后端来缓存.前端对于访问或操作缓存很有用.后端对于在File,memcache,Sqlite等中存储数据很有用.

首先通过在bootstrap文件中创建on函数来初始化前端和后备的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);
}
Run Code Online (Sandbox Code Playgroud)

然后使用zend cache factory定义缓存对象.参数核心定义了通用类型的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);
}
Run Code Online (Sandbox Code Playgroud)

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

对于下次页面加载,从缓存数据存储的文件中检索数据.

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

在该文件中数据是json格式.