PHP的缓存之一:数据级缓存
2009-2-3 16:15:48
作者:shiny
人气:
有个说法:CACHE FOR CASH。
可见CACHE(缓存)对于降低服务器压力、减少硬件成本、提高程序性能有非常重要的意义。
从缓存的范围来划分,一般缓存有两种:页面级的缓存和数据级的缓存。
这一篇讲数据级缓存,下一篇将讲页面级的缓存。
下面贴一个MEETTEA项目的简单的数据级缓存的示例。
重点是serialize和unserialize函数的应用,以及自定义的文件格式。
优点:可以设置过期的时间或永不过期;可以储存任何一种变量,尤其适合复杂的变量。
使用方法:
$dc = new dataCache();
/**key,相当于数组的KEY,对应了储存的值;$value,可以是任何一个PHP变量;1000,是过期的秒数,最长是5位,就是一天的秒数,0表示永不过期
***/
$dc->C('key',$value,1000);
#获取值,如果是false说明值过期或缓存已清理。
$value = $dc->C('key');
如果将这段代码应用到你的项目中,尚需略做修改,主要是数据的缓存目录、写入、读出数据的函数以及几个常量。
相信你看过之后就明白了。
欢迎你访问dev.meettea.com与shiny作进一步交流,也欢迎参与到项目http://www.svnhost.cn/Project/Detail-2595.shtml中,相互交流学习。
1<?php
2/**
3* 数据级缓存类
4*/
5!defined('IN_TEA') && exit('Access Denied');
6![]()
7class dataCache {
8public $fileName;
9public $cacheTime;
10function C($cacheName,$cacheValue = false,$cacheTime = 0){
11$this->fileName = TEA_CACHE_DIR.'dataCache/'.md5($cacheName);#文件地址
12if($cacheValue===false){
13# 读取缓存
14if (!file_exists($this->fileName))
15return false;
16$data = tReadFile($this->fileName);#请重写treadfile函数
17$this->cacheTime = intval(substr($data,0,5));
18if ($this->isActive())
19return unserialize(substr($data,5));
20else
21return false;
22}
23else
24{
25#写入缓存请重写twritefile函数
26tWriteFile($this->fileName,sprintf("%05d", $cacheTime).serialize($cacheValue),'w+');
27}
28}
29/**
30* 检测缓存是否过期
31*
32* @return bool true/false
33*/
34private function isActive(){
35if ($this->cacheTime==0)
36return true;
37else if(0<(time() - (filemtime($this->fileName)+$this->cacheTime))) {
38#缓存过期
39return false;
40}
41else
42return true;
43}
44/**
45* 清理缓存
46*
47*/
48public function clearCache(){
49$directory = dir(TEA_CACHE_DIR.'dataCache/');#请重新定义缓存目录
50while($entry = $directory->read()) {
51$filename = $dir.'/'.$entry;
52if(is_file($filename)) {
53@unlink($filename);
54}
55}
56$directory->close();
57}
58![]()
59}
60![]()
61?>
62
热门文章

