html5中文学习网

您的位置: 首页 > 网络编程 > PHP编程 » 正文

PHP缓存原理及使用方法_PHP教程_编程技术

[ ] 已经帮助:人解决问题

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

分析深入
一般来说,缓存的目的是把数据放在一个地方让访问的更快点,毫无疑问,内存是最快的,但是,几百M的数据能往内存放么?这不现实,当然,有的时 候临时放如服务器缓存,如ob_start()这个缓存页面开启的话在发送文件头之前页面内容都被缓存在内存中,知道等页面输出自动清楚或者等待 ob_get_contents的返回,或者被ob_end_clean显示的清除,这在静态页面的生成中能很好的利用,在模板中能得到很好的体现。
另外,在ASP中有一对象application,可以保存公用的参数,这也算点缓存,但在PHP,我至今没看到开发者产出这种对象,的确,没 必要.ASP.NET的页面缓存技术就用的是viewstate,而cache就是文件关联,(不一定准确),文件被修改,更新缓存,文件没被修改而且不 超时(注释1),就读取缓存,返回结果,就是这个思路,看看这个源码: PyvHTML5中文学习网 - HTML5先行者学习网

  1. <?PHP    
  2.     class cache{     
  3.     private $cache_dir;     
  4.     private $expireTime=180;//缓存的时间是 60 秒     
  5.     function __construct($cache_dirname){     
  6.      if(!@is_dir($cache_dirname)){     
  7.       if(!@mkdir($cache_dirname,0777)){     
  8.       $this->warn('缓存文件不存在而且不能创建,需要手动创建.');     
  9.       return false;     
  10.       }     
  11.      }     
  12.     $this->cache_dir = $cache_dirname;     
  13.     }     
  14.     function __destruct(){     
  15.      echo 'Cache class bye.';     
  16.     }     
  17.         
  18.     function get_url() {     
  19.             if (!isset($_SERVER['REQUEST_URI'])) {     
  20.                     $url = $_SERVER['REQUEST_URI'];     
  21.             }else{     
  22.                     $url = $_SERVER['SCRIPT_NAME'];     
  23.                     $url .= (!emptyempty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';     
  24.             }     
  25.         
  26.             return $url;     
  27.     }    
  28.     function warn($errorstring){   
  29.     echo "<b><font color='red'>发生错误:<pre>".$errorstring."</pre></font></b>";   
  30.     }   
  31.       
  32.     function cache_page($pageurl,$pagedata){   
  33.      if(!$fso=fopen($pageurl,'w')){   
  34.       $this->warns('无法打开缓存文件.');//trigger_error   
  35.       return false;   
  36.      }   
  37.      if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型锁定   
  38.       $this->warns('无法锁定缓存文件.');//trigger_error   
  39.       return false;   
  40.      }   
  41.      if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式   
  42.       $this->warns('无法写入缓存文件.');//trigger_error   
  43.       return false;   
  44.      }   
  45.      flock($fso,LOCK_UN);//释放锁定   
  46.      fclose($fso);   
  47.      return true;   
  48.     }   
  49.       
  50.     function display_cache($cacheFile){   
  51.                 if(!file_exists($cacheFile)){   
  52.         $this->warn('无法读取缓存文件.');//trigger_error   
  53.         return false;   
  54.                 }   
  55.        echo '读取缓存文件:'.$cacheFile;   
  56.     //return unserialize(file_get_contents($cacheFile));   
  57.             $fso = fopen($cacheFile'r');   
  58.             $data = fread($fsofilesize($cacheFile));   
  59.             fclose($fso);   
  60.      return $data;   
  61.     }   
  62.       
  63.     function readData($cacheFile='default_cache.txt'){   
  64.      $cacheFile = $this->cache_dir."/".$cacheFile;   
  65.      if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){   
  66.       $data=$this->display_cache($cacheFile);   
  67.       }else{   
  68.        $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)."----------";   
  69.        $this->cache_page($cacheFile,$data);   
  70.      }   
  71.       return $data;   
  72.     }   
  73.     }   
  74.     ?>  

PyvHTML5中文学习网 - HTML5先行者学习网
PyvHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯