国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

深入探討PHP緩存技術

開發 后端
PHP,一門最近幾年興起的Web設計腳本語言,由于它的強大和可伸縮性,近幾年來得到長足的發展。文章將著重分析PHP中的緩存技術,也就是Cache技術。一般來說,緩存的目的是把數據放在一個地方讓訪問的更快點。

PHP,一門最近幾年興起的Web設計腳本語言,由于它的強大和可伸縮性,近幾年來得到長足的發展,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),就讀取緩存,返回結果,就是這個思路,看看這個源碼:

  1. <?PHP 
  2. class cache{  
  3. /*  
  4. Class Name: cache  
  5. Description: control to cache data,$cache_out_time is a array to save cache date time out.  
  6. Version: 1.0  
  7. Author: 老農 cjjer  
  8. Last modify:2006-2-26  
  9. Author URL: http://www.cjjer.com  
  10. */  
  11. private $cache_dir;  
  12. private $expireTime=180;//緩存的時間是 60 秒  
  13. function __construct($cache_dirname){  
  14.  if(!@is_dir($cache_dirname)){  
  15.   if(!@mkdir($cache_dirname,0777)){  
  16.   $this->warn('緩存文件不存在而且不能創建,需要手動創建.');  
  17.   return false;  
  18.   }  
  19.  }  
  20. $this->cache_dir = $cache_dirname;  
  21. }  
  22. function __destruct(){  
  23.  echo 'Cache class bye.';  
  24. }  
  25.  
  26. function get_url() {  
  27.         if (!isset($_SERVER['REQUEST_URI'])) {  
  28.                 $url = $_SERVER['REQUEST_URI'];  
  29.         }else{  
  30.                 $url = $_SERVER['SCRIPT_NAME'];  
  31.                 $url .= (!empty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';  
  32.         }  
  33.  
  34.         return $url;  
  35. }  
  1. function warn($errorstring){  
  2. echo "<b><font color='red'>發生錯誤:<pre>".$errorstring."</pre></font></b>";  
  3. }  
  4.  
  5. function cache_page($pageurl,$pagedata){  
  6.  if(!$fso=fopen($pageurl,'w')){  
  7.   $this->warns('無法打開緩存文件.');//trigger_error  
  8.   return false;  
  9.  }  
  10.  if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型鎖定  
  11.   $this->warns('無法鎖定緩存文件.');//trigger_error  
  12.   return false;  
  13.  }  
  14.  if(!fwrite($fso,$pagedata)){//寫入字節流,serialize寫入其他格式  
  15.   $this->warns('無法寫入緩存文件.');//trigger_error  
  16.   return false;  
  17.  }  
  18.  flock($fso,LOCK_UN);//釋放鎖定  
  19.  fclose($fso);  
  20.  return true;  
  21. }  
  22.  
  23. function display_cache($cacheFile){  
  24.             if(!file_exists($cacheFile)){  
  25.     $this->warn('無法讀取緩存文件.');//trigger_error  
  26.     return false;  
  27.             }  
  28.    echo '讀取緩存文件:'.$cacheFile;  
  29. //return unserialize(file_get_contents($cacheFile));  
  30.         $fso = fopen($cacheFile, 'r');  
  31.         $data = fread($fso, filesize($cacheFile));  
  32.         fclose($fso);  
  33.  return $data;  
  34. }  
  35.  
  36. function readData($cacheFile='default_cache.txt'){  
  37.  $cacheFile = $this->cache_dir."/".$cacheFile;  
  38.  if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){  
  39.   $data=$this->display_cache($cacheFile);  
  40.   }else{  
  41.    $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)."----------";  
  42.    $this->cache_page($cacheFile,$data);  
  43.  }  
  44.   return $data;  
  45. }  
  46.  
  47. }  
  48. ?> 

下面我打斷這個代碼逐行解釋.

#p#

程序透析

這個緩存類(類沒什么好怕的.請繼續看)名稱是cache,有2個屬性:

  1. private $cache_dir;  
  2. private $expireTime=180

$cache_dir是緩存文件所放的相對網站目錄的父目錄, $expireTime(注釋一)是我們緩存的數據過期的時間,主要是這個思路:

當數據或者文件被加載的時候,先判斷緩存文件存在不,返回false ,文件***修改時間和緩存的時間和比當前時間大不,大的話說明緩存還沒到期,小的話返回false,當返回false的時候,讀取原始數據,寫入緩存文件中,返回數據。接著看程序:

  1. function __construct($cache_dirname){  
  2.  if(!@is_dir($cache_dirname)){  
  3.   if(!@mkdir($cache_dirname,0777)){  
  4.   $this->warn('緩存文件不存在而且不能創建,需要手動創建.');  
  5.   return false;  
  6.   }  
  7.  }  
  8. $this->cache_dir = $cache_dirname;  

當類***次被實例的時候構造默認函數帶參數緩存文件名稱,如文件不存在,創建一個有編輯權限的文件夾,創建失敗的時候拋出異常.然后把cache類的 $cache_dir屬性設置為這個文件夾名稱,我們的所有緩存文件都是在這個文件夾下面的.

  1. function __destruct(){  
  2.  echo 'Cache class bye.';  

這是class類的析構函數,為了演示,我們輸出一個字符串表示我們釋放cache類資源成功.

  1. function warn($errorstring){  
  2. echo "<b><font color='red'>發生錯誤:<pre>".$errorstring."</pre></font></b>";  

這個方法輸出錯誤信息:

  1. function get_url() {  
  2.         if (!isset($_SERVER['REQUEST_URI'])) {  
  3.                 $url = $_SERVER['REQUEST_URI'];  
  4.         }else{  
  5.                 $url = $_SERVER['SCRIPT_NAME'];  
  6.                 $url .= (!empty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';  
  7.         }  
  8.  
  9.         return $url;  
  10. }  

這個方法返回當前url的信息,這是我看國外很多人的cms系統這樣做,主要是緩存x.PHP?page=1,x.PHP?page=2,等這種文件的,這里列出是為了擴展的這個cache類功能的。

  1. function cache_page($pageurl,$pagedata){  
  2.  if(!$fso=fopen($pageurl,'w')){  
  3.   $this->warns('無法打開緩存文件.');//trigger_error  
  4.   return false;  
  5.  }  
  6.  if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型鎖定  
  7.   $this->warns('無法鎖定緩存文件.');//trigger_error  
  8.   return false;  
  9.  }  
  10.  if(!fwrite($fso,$pagedata)){//寫入字節流,serialize寫入其他格式  
  11.   $this->warns('無法寫入緩存文件.');//trigger_error  
  12.   return false;  
  13.  }  
  14.  flock($fso,LOCK_UN);//釋放鎖定  
  15.  fclose($fso);  
  16.  return true;  

#p#

cache_page方法分別傳入的是緩存的文件名稱和數據,這是把數據寫到文件里的方法,先用fopen打開文件,然后調用句柄鎖定這個文件,然后用fwrite寫入文件,***釋放這個句柄,任何一步發生錯誤將拋出錯誤. 您可能看到這個注釋:

寫入字節流,serialize寫入其他格式,順便一提的是如果我們要把一個數組,(可以從MySQL數據庫里面select查詢除了的結果)用serialize函數寫入,用unserialize讀取到原來的類型。

  1. function display_cache($cacheFile){  
  2.             if(!file_exists($cacheFile)){  
  3.     $this->warn('無法讀取緩存文件.');//trigger_error  
  4.     return false;  
  5.             }  
  6.    echo '讀取緩存文件:'.$cacheFile;  
  7. //return unserialize(file_get_contents($cacheFile));  
  8.         $fso = fopen($cacheFile, 'r');  
  9.         $data = fread($fso, filesize($cacheFile));  
  10.         fclose($fso);  
  11.  return $data;  

這是由文件名稱讀取緩存的方法,直接打開文件,讀取全部,如果文件不存在的或者無法讀取的話返回false,當然,你感到不人性的話,可以重新生成緩存.

  1. function readData($cacheFile='default_cache.txt'){  
  2.  $cacheFile = $this->cache_dir."/".$cacheFile;  
  3.  if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){  
  4.   $data=$this->display_cache($cacheFile);  
  5.   }else{  
  6.    $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)."----------";  
  7.    $this->cache_page($cacheFile,$data);  
  8.  }  
  9.   return $data;  

這個函數是我們調用的方法,可以寫成接口的方法,由傳入參數判斷文件存在不,文件***修改時間+expireTime的時間是不是過了當前時間(大于的話說明沒有過期),如果文件不存在或者已經過期,重新加載原始數據,這里,為了簡單期間,我們是直接源是字符串,您可以把cache類繼承某類,取到數據庫的數據.(注釋2)

補充說明 結語

注釋一:這個緩存的時間您可以自己調,可以根據時間情況讀取數組,xml,緩存等,請按照您的方便,值得一提的是緩存的時間(也就是緩存的key)也用緩存控制,.這在cms系統中被廣泛使用,他們把要更新的key放在緩存中,非常容易控制全戰。

注釋二:PHP5開始支持類繼承,這是讓人興奮的,把網站全局休息寫在一個配置的類里面,再寫與數據層交互的類(如與MySQL交互的類),我們的這個cache類繼承數據交互的類,可以非常容易的讀取數據庫,這是外話,此處不再展開,有時間和大家詳談。

【編輯推薦】

  1. PHP文件緩存包含三種格式
  2. PHP數據緩存類必要性分析
  3. PHP緩存機制的具體講解
責任編輯:王曉東 來源: 網絡轉載
相關推薦

2009-12-07 16:07:03

PHP類的繼承

2009-12-07 13:55:58

PHP array_m

2009-12-02 16:46:18

PHPMailer

2009-12-02 11:20:56

PHP命令行參數

2009-12-01 15:48:12

提高PHP運行效率

2009-12-01 16:34:21

PHP表單

2010-03-01 17:57:11

WCF緩存機制

2009-12-07 19:06:20

PHP mysql_f

2009-12-23 16:13:00

WPF Attache

2010-11-22 14:18:32

MySQL鎖機制

2009-12-28 14:59:23

寬帶接入技術ADSL技

2021-05-17 05:36:02

CSS 文字動畫技巧

2009-11-20 17:17:08

Oracle函數索引

2010-01-18 18:20:07

軟交換技術

2009-12-07 11:21:59

PHP生成縮略圖

2009-12-10 13:14:26

PHP下拉框

2009-11-27 10:46:14

GPRS路由

2011-02-25 09:23:00

Java類加載器

2015-09-02 08:57:56

JavaHashMap工作原理

2009-08-27 11:27:58

foreach語句C# foreach語
點贊
收藏

51CTO技術棧公眾號

亚洲小说图片视频| 欧美精品自拍| www.午夜精品| 日韩精品一区二区三区| 亚洲精品在线一区二区| 欧美aa视频| 麻豆国产精品va在线观看不卡| 成人h在线观看| 麻豆乱码国产一区二区三区| 奇米777国产一区国产二区| 国产这里只有精品| 国产精品色网| 日本香蕉视频在线观看| 国产校园另类小说区| 导航福利在线| 欧美日韩一区二区三区高清| 麻豆mv在线看| 国内精品久久久久久影视8| 成人网18免费网站| 欧美福利精品| 91天堂素人约啪| 午夜影院在线免费观看| 日韩美女视频一区二区在线观看| 亚洲免费福利| 欧美一区二粉嫩精品国产一线天| 99久久夜色精品国产亚洲96| 国产精品入口日韩视频大尺度| 亚洲免费黄色| 国产免费黄色av| 精品久久久视频| 欧美亚洲韩国| 91精品视频在线播放| 狠狠色丁香九九婷婷综合五月| 成人一区二区三| 欧美性xxxxxx| 欧美一级网址| 国产精品嫩草在线观看| www.爱久久.com| 国产视频在线看| 久久精品国产成人| 亚洲欧洲一区| 天天干天天操天天玩| 欧美乱妇20p| av不卡一区二区| 久久久久久久久久码影片| 91天堂素人约啪| 91精品国产综合久久久久久豆腐| 精品国内亚洲在观看18黄| 自由日本语亚洲人高潮| 国产中文字幕乱人伦在线观看| 亚洲成人免费在线观看| 亚洲人免费短视频| 成人影片在线播放| 国产欧美日韩三级| 18video性欧美19sex高清| 国产精品小说在线| 92国产精品观看| 国产激情视频在线| 97高清免费视频| 精品一二三四在线| 四虎影院在线播放| x99av成人免费| 日本成人在线一区| av在线电影网站| 久久久精品国产网站| 久久亚洲色图| 在线观看视频网站你懂得| 久久精品99国产精品酒店日本| 欧美日韩国产色综合一二三四| 亚洲精品乱码久久久久久自慰| 精品国产乱码久久久久久免费| 日韩精品午夜| 91欧美视频在线| 色系列之999| 秋霞影院一区二区| 国产在线观看网站| 国产精品久久久久91| 久久久青草青青国产亚洲免观| 色呦呦在线免费观看| 国产精品香蕉国产| 国产精品久久久久一区二区三区共| 大桥未久在线视频| 久久国产精品 国产精品| 亚洲国产一区二区三区青草影视| 久久久久久久久久久久电影| 中国一级大黄大黄大色毛片| 欧美剧情电影在线观看完整版免费励志电影| 日韩美女毛片| 国产日产欧美视频| 日韩av最新在线| 日韩精品一区第一页| 亚洲乱亚洲乱妇| 国产一区视频在线播放| 亚洲日本一区二区三区| 国产精品白浆| 奇米影音第四色| 欧美激情在线狂野欧美精品| 99精品视频在线播放观看| 日韩高清成人| av在线观看地址| 日日骚av一区| 久久综合久久综合亚洲| 六九午夜精品视频| 97成人在线免费视频| 中文字幕亚洲一区在线观看 | 在线观看免费一区| 天天综合亚洲| 天堂在线中文资源| 亚洲自拍高清视频网站| 好吊成人免视频| 一区二区三区在线电影| 日韩黄色影片| 精品视频在线观看| 日韩丝袜美女视频| 国产在线看一区| 欧美aaaaaaaa| 538任你躁在线精品免费| 91精品国产91| 精品久久久久久久久久久久久| 亚洲精品小说| 免费a级在线播放| 视频在线一区二区三区| 国产视频精品自拍| 91论坛在线播放| 岳的好大精品一区二区三区| 小草av在线播放| 日本欧洲国产一区二区| 亚洲精品国产精品国自产观看浪潮 | 91在线视频一区| 欧美色成人综合| 日本aⅴ免费视频一区二区三区| 黄视频网站在线观看| 成人毛片一区二区| 91国产精品91| 欧美午夜激情在线| 免费成人性网站| 国产不卡精品| 尤物免费看在线视频| 欧美一区二区视频在线| 国产午夜精品视频| 中文字幕一区二区视频| 女人色偷偷aa久久天堂| 白浆在线视频| 中文字幕av专区| 国产伦精品一区二区| 日韩精品视频三区| 亚洲久草在线视频| 久久综合亚州| 免费成人蒂法| av在线免费网址| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 国产噜噜噜噜久久久久久久久| 欧美不卡视频一区| 日本一区二区三区四区在线视频| 综合日韩在线| 欧美综合社区国产| 国产三级电影在线| 国产一区亚洲二区三区| 国产精品久久国产三级国电话系列 | 成人欧美在线视频| 国产偷国产偷亚洲清高网站| 亚洲青青青在线视频| 日韩不卡免费视频| 日韩av系列| 福利在线免费视频| 免费看成年人视频在线观看 | 日本一区福利在线| 伊人福利在线| 色偷偷亚洲女人天堂观看欧| 日韩精品电影网站| 国产成人av在线播放| 亚洲精品视频二区| 精品国产999| 久久精品在这里| 免费高清在线一区| 91青青国产在线观看精品| www.成人在线视频| 69久久夜色| 曰韩少妇与小伙激情| av一区二区三区免费观看| 91探花福利精品国产自产在线| 爽爽爽爽爽爽爽成人免费观看| 色综合天天综合网国产成人综合天| 床上的激情91.| 亚洲尤物精选| 久久精品国产99久久| а天堂中文最新一区二区三区| 老司机av在线免费看| 97高清视频| 亚洲色欲久久久综合网东京热| 国产精品一区二区三区观看| 欧美亚洲视频在线看网址| 亚洲视频在线播放| 制服丝袜中文字幕一区| 亚洲精品国产一区二区精华液| www.日韩在线| 精品一区二区三区欧美| 亚洲天堂激情| 色综合久久一区二区三区| 国产成人在线中文字幕|