开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Zend Framework Cache常用代码实例

简介:
+关注继续查看

Zend Framework中有3种常用的前端类,分别是

Zend_Cache_Core

Zend_Cache_Frontend_Output

Zend_Cache_Frontend_Page

与之对应的ASP.NET中的概念分别是数据缓存,片段缓存,页面缓存。

其中Zend_Cache_Frontend_Output和Zend_Cache_Frontend_Page都继承了Zend_Cache_Core。

在创建缓存的时候,对应的代码如下,这些代码一般写在资源方法中,Bootstrap.php文件内。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (false == Zend_Registry::isRegistered('coreCache')) {
    $frontendOptions array(
            'lifetime' => 10,
            'automatic_serialization' => true
    );
                 
    $backendOptions array(
            'cache_dir' => APPLICATION_PATH . '/tmp'
    );
                 
    $core_cache = Zend_Cache::factory('Core''File'$frontendOptions,
            $backendOptions);
    Zend_Registry::set('coreCache'$core_cache);
}


1
2
3
4
5
6
7
8
9
10
11
12
13
if (false == Zend_Registry::isRegistered('outputCache')) {
    $frontendOptions array(
            'lifetime' => 10
    );
               
    $backendOptions array(
            'cache_dir' => APPLICATION_PATH . '/tmp'
    );
               
    $output_cache = Zend_Cache::factory('Output''File',
            $frontendOptions$backendOptions);
    Zend_Registry::set('outputCache'$output_cache);
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (false == Zend_Registry::isRegistered('pageCache')) {
    $frontendOptions array(
            'lifetime' => 4
    )
    ;
             
    $backendOptions array(
            'cache_dir' => APPLICATION_PATH . '/tmp'
    );
             
    $page_cache = Zend_Cache::factory('Page''File'$frontendOptions,
            $backendOptions);
    Zend_Registry::set('pageCache'$page_cache);
}

Zend_Cache_Core主要用来缓存数据。比如数组,字符串之类的。类似ASP.NET中的数据缓存。下面的代码演示如何用缓存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try {
            $core_cache = Zend_Registry::get('coreCache');
            $z_now = Zend_Date::now();
            if (!$result $core_cache->load("now")) // 缓存未命中
            {
                echo "缓存未命中<br>";
                $core_cache->save($z_now"now");//加入缓存
                echo $z_now;
            else {
                echo "缓存命中<br>";
                echo $result;
            }
        catch (Exception $e) {
echo $e->getMessage();
        }

初次打开页面,由于没有缓存,因此缓存未命中,把当前时间加入缓存中。然后刷新页面,缓存已经有了,直接读缓存,因此会发现时间不变。

当10秒后缓存失效,缓存又未命中了。

Zend_Cache_Frontend_Output继承了Zend_Cache_Core,因此上述的缓存数据的方法,它也可以使用。

同时它是一个输出捕捉前端.它在PHP中使用输出缓冲捕获start() 和 end() 方法间的一切输出. 类似于ASP.NET中的片段缓存。看如下示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
try {
            $output_cache = Zend_Registry::get('outputCache');
            if (!($output_cache->start('myoutput'))) {
                echo Zend_Date::now();
                $output_cache->end(); // output buffering ends
                echo "缓存未命中";
            }
           echo "<br>当前时间为:";
           echo Zend_Date::now();
        catch (Exception $e) {
echo $e->getMessage();
        }

$output_cache->start('myoutput') 这句话,如果已经有了myoutput这个缓存的话,也就是说start方法返回的是true的话,则if里面的语句运行了。直接把myoutput这个缓存的内容输出一遍。否则,重新记录一遍myoutput缓存,缓存的内容就是送start到end之间的内容。发送缓存记录后,后续的代码继续运行下去。

Zend_Cache_Frontend_Page同样继承了Zend_Cache_Core,它和Zend_Cache_Frontend_Output类似,但不同的是,它不是缓存单一的数据片断,而是缓存整个页面。因此它只有start方法,没有end方法,或者说当程序运行完,会自动的运行end方法。使用更简单,只需要代码如下:

1
2
3
4
5
6
7
try {
    $page_cache = Zend_Registry::get('pageCache');
    $page_cache->start();
    echo Zend_Date::now();
catch (Exception $e) {
    echo $e->getMessage();
}

首次的时候,会把start方法后面的输出都会缓存起来。下次运行的时候,缓存命中的话,就直接发送缓存,而不执行下面的语句了。如果后续的语句是数据库中的数据,则会节省了数据库读取操作。提升了效率。

















本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1300904,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Zenf Framework Tool
Zend_Tool是一个ZF项目创建的好工具,可以利用Zend_tool来创建我们的ZF项目的目录结构! 1、Zend_Tool的安装过程(For Windows):   (1)在C:\Program Files下创建一个叫做ZendFrameworkCli的文件夹;   (2)将下载...
575 0
Entity Framework快速入门--一对零到一关系处理
很久不更新blog了,正好趁着端午节的空,把之前一段时间使用关于EF以及工作上经验总结一下。 此文将跟朋友们分享一下关于1对0..1实体模型一些使用包括基本的添加和查询的注意事项。 首先我们EDMX实体模型: 模型很简单,一个用户的实体,另外关联了一个用户信息的实体。
561 0
zend framework集成smarty
------zf的入口文件-index.php---------
599 0
zendframework1.11.10
 cakephp-cakephp-2.0.0-beta-0-g402934f.zip    ZendFramework-1.11.10-minimal.tar.part1.rar    ZendFramework-1.
410 0
Zend Framework手册 中文版
http://www.php100.com/manual/ZendFramework/
539 0
spring-framework最新源码调试
最近打算阅读spring-framework的源码,按照GitHub中在spring-framework项目中给出的编译和导入IntelliJ IDEA的方式进行操作,其中还是遇到了各种各样的问题。主要是环境,最好都用新的,JDK17、Idea 2021、Gradle7.2、Tomcat10等,然后就是多次重试。最终还是成功了,文章末尾也列了几个遇到的问题及最终存在我的GitHub中的地址。
0 0
spring-framework最新源码调试(一)
最近打算阅读spring-framework的源码,按照GitHub中在spring-framework项目中给出的编译和导入IntelliJ IDEA的方式进行操作,其中还是遇到了各种各样的问题。主要是环境,最好都用新的,JDK17、Idea 2021、Gradle7.2、Tomcat10等,然后就是多次重试。最终还是成功了,文章末尾也列了几个遇到的问题及最终存在我的GitHub中的地址。
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载