Zend_Cache 的基本用法

时间:2022-06-20 00:06:01

简单研究了一下Zend_Cache的用法,特留存于此

Zend_Cache有两部分组成:前端和后端,前端用于操作缓存,后端提供缓存的存储方式。

Zend_Cache的基本使用方式

一般使用工厂方式:Zend_Cache::factory()的创建缓存对象。

Zend_Cache::factory方法有四个参数: 前端类型,后端类型,前端参数,后端参数。

前端类型有:

1.Core 这是前端的核心缓存,前端的其他类型缓存都继承自Core,缓存变量或数组就用到这个了。

2.File 缓存文件,没有研究具体用途

3.Output 捕获并缓存输出,这个做页面局部缓存很有用,个人认为缺点是需要在视图中写入相应的代码。

4.Page 缓存页面,对提高效率帮助很大,因为一但命中缓存,就直接读取缓存并输出,不再执行后面的代码。可以设定session,cookie,get,post 作为产生cache_id的干扰码。比如不同的cookie产生不同的缓存页面。缺点是只能整个页面缓存,不能像smarty那样实现整页缓存,但是可以 控制局部不缓存。

5.Class 缓存静态类和对象。

6.Function 缓存函数。

后端类型有:

1.APC

2.File

3.Memcached

4.Sqlite

5.Xcache

6.ZendPlatform

一目了然了,大部分人经常会用到的是File和Memcached吧。

前端参数和后端参数,不同前后端类型有不同的参数,具体请查看官方手册 http://framework.zend.com/manual/en/zend.cache.frontends.html。

具体实例(数组缓存和页面缓存)

一.前端类型为Core, 后端类型File的缓存对象的创建及使用

[code]

<?php

$frontend = 'Core';

$frontendOptions = array(

    'caching' => true, //开启缓存,调试程序的时候可以设为false

    'lifetime' =&gt; 3600, //缓存生命期

    'automatic_serialization' =&gt; true //自动序列化,存储数组或者对象数据时一定要打开

);

$backend = 'File';

$backendOptions =&gt; array(

    'cache_dir' =&gt; '/tmp', //存放路径

    'file_name_prefix' =&gt; 'page_cache' //缓存文件前缀,默认为zend_cache

)

//实例化缓存对象

$coreCache = Zend_Cache::factroy($frontend, $backend, $frontendOptions, $backednOptions);

//如果命中id为news_list的缓存直接得到$newsList,未命中执行大括号内的代码

if (!$newsList = $coreCache-&gt;load('news_list')) {

    //查询数据库,得到$newsList

    //....省略

   

    //缓存$newslist至缓存,id为news_list

    $coreCache-&gt;save($newsList, 'news_list');  

}

?&gt;

[/code]

二、前端类型为Page,后端依然为File的实例

<?php

$frontend = 'Page';

$frontendOptions = array(

    'caching' => true, //开启缓存,调试程序的时候可以设为false

    'lifetime' =&gt; 3600, //缓存生命期

   

    //需要使用页面缓存的url匹配规则

    'regexps' =&gt; array(

       //首页的url匹配

        '^/(index|index/)?$' =&gt;array(

              'cache' =&gt; true,

              'cache_with_session_variables' =&gt; false, //如果存在session变量不缓存

              'cache_with_cookie_variables' =&gt; true, //如果存在cookie变量缓存

              'make_id_with_cookie_variables' =&gt; false //不使用cookie变量作为id的干扰码

        )

     )

);

$backend = 'File';

$backendOptions =&gt; array(

    'cache_dir' =&gt; '/tmp', //存放路径

    'file_name_prefix' =&gt; 'page_cache' //缓存文件前缀,默认为zend_cache

)

//实例化页面缓存对象

$pageCache = Zend_Cache::factroy($frontend, $backend, $frontendOptions, $backednOptions);

//如果命中缓存,直接输出缓存内容,并终止程序,后面的代码将不被执行,如果未命中,捕获输出并写入缓存。

$pageCache-&gt;start();

?&gt;

需要注意的是,如果用到页面缓存,为了最大程度提高执行效率,应将代码放到程序的最前面。减少不必要的文件包含及操作。

顺便提一句,Zend_Cache没有跟ZF其他组件耦合,所以也可以单独提取出来用于非ZF框架的程序。