PHP的缓存之一:数据级缓存

2009-2-3 16:15:48 作者:shiny 人气:
标签:php(210) 缓存(3)

shiny原创,版权:dev.meettea.com

有个说法: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 {
8 public $fileName;
9 public $cacheTime;
10 function C($cacheName,$cacheValue = false,$cacheTime = 0){
11 $this->fileName = TEA_CACHE_DIR.'dataCache/'.md5($cacheName);#文件地址
12 if($cacheValue===false){
13 # 读取缓存
14 if (!file_exists($this->fileName))
15 return false;
16 $data = tReadFile($this->fileName);#请重写treadfile函数
17 $this->cacheTime = intval(substr($data,0,5));
18 if ($this->isActive())
19 return unserialize(substr($data,5));
20 else
21 return false;
22 }
23 else
24 {
25 #写入缓存请重写twritefile函数
26 tWriteFile($this->fileName,sprintf("%05d", $cacheTime).serialize($cacheValue),'w+');
27 }
28 }
29 /**
30 * 检测缓存是否过期
31 *
32 * @return bool true/false
33 */
34 private function isActive(){
35 if ($this->cacheTime==0)
36 return true;
37 else if(0<(time() - (filemtime($this->fileName)+$this->cacheTime))) {
38 #缓存过期
39 return false;
40 }
41 else
42 return true;
43 }
44 /**
45 * 清理缓存
46 *
47 */
48 public function clearCache(){
49 $directory = dir(TEA_CACHE_DIR.'dataCache/');#请重新定义缓存目录
50 while($entry = $directory->read()) {
51 $filename = $dir.'/'.$entry;
52 if(is_file($filename)) {
53 @unlink($filename);
54 }
55 }
56 $directory->close();
57 }
58
59}
60
61?>
62

 

使用协议 - VIP服务 - 在线支付 - 联系我们 - 帮助文档 - Bug Report - 书签服务 - 联系电话:15079690152