程序运行的时候可以通过 Yii::app()->cache 来访问缓存组件。
Yii 提供多种缓存组件以便在不同的媒介上存储缓存数据 。 比如 CMemCache 组件封装了 PHP memcache 扩展 , 它使
用内存作为存储缓存的媒介; CApcCache 组件封装了 PHP APC 扩展; CDbCache 组件在数据库里存储缓存数据。下
面是各种缓存组件的简要说明:
CMemCache: 使用 PHP memcache 扩展。
CApcCache: 使用 PHP APC 扩展。
CXCache: 使用 PHP XCache 扩展。
CDbCache: 使用一张数据库表来存储缓存数据 。 它默认在运行时目录建立并使用一个 SQLite3 数据库 , 你可以通过设
置 connectionID 属性显式地指定一个数据库给它使用。
提示 : 因为所有这些缓存组件都从同一个基础类 CCache 扩展而来,不需要修改使用缓存的代码即可在不同的缓存组
件之间切换。
缓存可以在不同的级别使用。在最低级别,我们使用缓存来存储单个数据,比如一个变量,我们把它叫做 数据缓存 。
往上一级,我们缓存一个由视图脚本生成的页面片断。在最高级别,我们存储整个页面以便需要的时候直接从缓存读
取。
接下来我们将阐述如何在这些级别上使用缓存。
注意 : 按定义来讲 , 缓存是一个不稳定的存储媒介 , 它不保证缓存一定存在 —— 不管该缓存是否过期 。 所以 , 不要使用
缓存进行持久存储(比如,不要使用缓存来存储 SESSION 数据 ) 。
一、数据缓存
数据缓存也就是在缓存中存储一些 PHP 变量 , 过一会再取出来 。 缓存基础类 CCache 提供了两个最常用的方法 : set()
和 get() 。
要在缓存中存储变量 $value ,我们选择一个唯一 ID 并调用 set() 来存储它:
Yii::app()->cache->set($id, $value);
被缓存的数据会一直保留在缓存中 , 直到因一些缓存策略而被删除 ( 比如缓存空间满了 , 删除最旧的数据 ) 。 要改变这
一行为,我们还可以在调用 set() 时加一个过期参数,这样数据过一段时间就会自动从缓存中清除。
// 在缓存中保留该值最多 30 秒
Yii::app()->cache->set($id, $value, 30);
当我们稍后需要访问该变量时 ( 不管是不是同一 Web 请求 ) , 我们调用 get() ( 传入 ID ) 来从缓存中获取它 。 如果返
回值为 false ,说明该缓存不可用,需要我们重新生成它。
[php]
14 $value=Yii::app()->cache->get($id);
15 if($value===false)
16 {
17 // 因为在缓存中没找到,重新生成 $value
18 // 再缓存一下以备下次使用
19 // Yii::app()->cache->set($id,$value);
20 }
为一个要缓存的变量选择 ID 时,确保该 ID 在应用中是唯一的。不必保证 ID 在跨应用的情况下保证唯一,因为缓
存组件有足够的智能来区分不同应用的缓存 ID 。
要从缓存中删除一个缓存值 , 调用 delete() ; 要清空所有缓存 , 调用 flush() 。 调用 flush() 时要非常小心 , 因为它会把
其它应用的缓存也清空。
提示 : 因为 CCache 实现了 ArrayAccess 接口,可以像数组一样使用缓存组件。例如:
[php]
21 $cache=Yii::app()->cache;