首页  韩国资源  酷站加油  我的展厅  设计名站  古典元素  推荐下载  设计欣赏  每周专访  招募精英  人才专区  网页教程  平面设计  编程开发  设计竞赛
当前位置:首页 > 编程开发 > PHP教程 > 正文
Google
讲解PHP中缓存技术的应用
来源:68design.net 2007年09月21日 08:54 网友评论:0条 点击:

  PHP,一门最近几年兴起的web设计脚本语言,由于它的强大和可伸缩性,近几年来得到长足的发展,php相比传统的asp网站,在速度上有绝对的优势,想mssql转6万条数据php如需要40秒,asp不下2分钟.但是,由于网站的数据越来越多,我们渴求能更快速的调用数据,不必要每次都从数据库掉,我们可以从其他的地方,比方一个文件,或者某个内存地址,这就是php的缓存技术,也就是Cache技术.

  一般来说,缓存的目的是把数据放在一个地方让访问的更快点,毫无疑问,内存是最快的,但是,几百M的数据能往内存放么?这不现实,当然,有的时候临时放如服务器缓存,如ob_start()这个缓存页面开启的话在发送文件头之前页面内容都被缓存在内存中,知道等页面输出自动清楚或者等待ob_get_contents的返回,[或者被ob_end_clean显示的清除,这在静态页面的生成中能很好的利用,在模板中能得到很好的体现,我的这篇文章深入的讨论了:

 谈PHP生成静态页面,这是一种方式,但这是临时性的,不是解决我们问题的好方法.

  另外,在asp中有一对象application,可以保存公用的参数,这也算点缓存,但在php,我至今没看到开发者产出这种对象,的确,没必要.asp.net的页面缓存技术就用的是viewstate,而cache就是文件关联,(不一定准确),文件被修改,更新缓存,文件没被修改而且不超时(注释1),就读取缓存,返回结果,就是这个思路,看看这个源码:

<?php
class cache{
/*
Class Name: cache
Description: control to cache data,$cache_out_time is a array to save cache date time out.
Version: 1.0
Author: 老农 cjjer
Last modify:2006-2-26
Author URL: http://www.cjjer.com
*/
private $cache_dir;
private $expireTime=180;//缓存的时间是 60 秒
function __construct($cache_dirname){
    if(!@is_dir($cache_dirname)){
        if(!@mkdir($cache_dirname,0777)){
        $this->warn('缓存文件不存在而且不能创建,需要手动创建.');
        return false;
        }
    }
$this->cache_dir    =    $cache_dirname;
}
function __destruct(){
    echo 'Cache class bye.';
}

function get_url() {
        if (!isset($_SERVER['REQUEST_URI'])) {
                $url = $_SERVER['REQUEST_URI'];
        }else{
                $url = $_SERVER['SCRIPT_NAME'];
                $url .= (!empty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';
        }

        return $url;
}

function warn($errorstring){
echo "<b><font color='red'>发生错误:<pre>".$errorstring."</pre></font></b>";
}

function cache_page($pageurl,$pagedata){
    if(!$fso=fopen($pageurl,'w')){
        $this->warns('无法打开缓存文件.');//trigger_error
        return false;
    }
    if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型锁定
        $this->warns('无法锁定缓存文件.');//trigger_error
        return false;
    }
    if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式
        $this->warns('无法写入缓存文件.');//trigger_error
        return false;
    }
    flock($fso,LOCK_UN);//释放锁定
    fclose($fso);
    return true;
}

function display_cache($cacheFile){
            if(!file_exists($cacheFile)){
                $this->warn('无法读取缓存文件.');//trigger_error
                return false;
            }
            echo '读取缓存文件:'.$cacheFile;
//return unserialize(file_get_contents($cacheFile));
        $fso = fopen($cacheFile, 'r');
        $data = fread($fso, filesize($cacheFile));
        fclose($fso);
    return $data;
}

function readData($cacheFile='default_cache.txt'){
    $cacheFile    =    $this->cache_dir."/".$cacheFile;
    if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){
        $data=$this->display_cache($cacheFile);
        }else{
            $data="from here wo can get it from mysql database,update time is <b>".date('l dS \of F Y h:i:s A')."</b>,过期时间是:".date('l dS \of F Y h:i:s A',time()+$this->expireTime)."----------";
            $this->cache_page($cacheFile,$data);
    }
        return $data;
}



}
?>

下面我打断这个代码逐行解释.
 三:程序透析

这个缓存类(类没什么好怕的.请继续看)名称是cache,有2个属性:

private $cache_dir;
private $expireTime=180;
首页 上一页 [1] [2] 下一页 尾页
上一篇:PHP中常用的数值判断函数   下一篇:PHP中常用的mysql语句
收藏此页】【打印】【关闭
 相关文章  我要点评
·PHP程序不实用大型系统的九大原因
·php设计模式介绍之值对象模式
·php设计模式介绍之导言
·php设计模式介绍之编程惯用法
·php设计模式介绍之值对象模式
·php设计模式介绍之导言
·PHP使用zlib扩展实现页面GZIP压缩输出
·PHP:避免重复提交和检查数据来路

免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有任何异议,请联络:68design#163.com
转载要求:作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印。



关于我们 | 在线反馈 | 广告报价 | 友情链接 | 联系我们 | 免责声明 | 在线投稿 | 网站地图
Copyright © 2003-2007 68design.net, All Rights Reserve 【找网页设计师,当然上网页设计师联盟】