真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP如何實(shí)現(xiàn)緩存技術(shù)

這篇文章給大家分享的是有關(guān)PHP如何實(shí)現(xiàn)緩存技術(shù)的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

我們提供的服務(wù)有:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、將樂(lè)ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的將樂(lè)網(wǎng)站制作公司

PHP,一門(mén)最近幾年興起的Web設(shè)計(jì)腳本語(yǔ)言,由于它的強(qiáng)大和可伸縮性,近幾年來(lái)得到長(zhǎng)足的發(fā)展,PHP相比傳統(tǒng)的ASP網(wǎng)站,在速度上有絕對(duì)的優(yōu)勢(shì),想mssql轉(zhuǎn)6萬(wàn)條數(shù)據(jù)PHP如需要40秒,ASP不下2分鐘.但是,由于網(wǎng)站的數(shù)據(jù)越來(lái)越多,我們渴求能更快速的調(diào)用數(shù)據(jù),不必要每次都從數(shù)據(jù)庫(kù)掉,我們可以從其他的地方,比方一個(gè)文件,或者某個(gè)內(nèi)存地址,這就是PHP的緩存技術(shù),也就是Cache技術(shù)。

分析深入

一般來(lái)說(shuō),緩存的目的是把數(shù)據(jù)放在一個(gè)地方讓訪問(wèn)的更快點(diǎn),毫無(wú)疑問(wèn),內(nèi)存是最快的,但是,幾百M(fèi)的數(shù)據(jù)能往內(nèi)存放么?這不現(xiàn)實(shí),當(dāng)然,有的時(shí)候臨時(shí)放如cache_page($cacheFile,$data);   }    return $data;  }   }  ?>

下面我打斷這個(gè)代碼逐行解釋.

程序透析

這個(gè)緩存類(lèi)(類(lèi)沒(méi)什么好怕的.請(qǐng)繼續(xù)看)名稱是cache,有2個(gè)屬性:

private $cache_dir;  private $expireTime=180;

$cache_dir是緩存文件所放的相對(duì)網(wǎng)站目錄的父目錄, $expireTime(注釋一)是我們緩存的數(shù)據(jù)過(guò)期的時(shí)間,主要是這個(gè)思路:

當(dāng)數(shù)據(jù)或者文件被加載的時(shí)候,先判斷緩存文件存在不,返回false ,文件***修改時(shí)間和緩存的時(shí)間和比當(dāng)前時(shí)間大不,大的話說(shuō)明緩存還沒(méi)到期,小的話返回false,當(dāng)返回false的時(shí)候,讀取原始數(shù)據(jù),寫(xiě)入緩存文件中,返回?cái)?shù)據(jù)。接著看程序:

function __construct($cache_dirname){   if(!@is_dir($cache_dirname)){    if(!@mkdir($cache_dirname,0777)){    $this->warn('緩存文件不存在而且不能創(chuàng)建,需要手動(dòng)創(chuàng)建.');    return false;    }   }  $this->cache_dir = $cache_dirname;  }

當(dāng)類(lèi)***次被實(shí)例的時(shí)候構(gòu)造默認(rèn)函數(shù)帶參數(shù)緩存文件名稱,如文件不存在,創(chuàng)建一個(gè)有編輯權(quán)限的文件夾,創(chuàng)建失敗的時(shí)候拋出異常.然后把cache類(lèi)的 $cache_dir屬性設(shè)置為這個(gè)文件夾名稱,我們的所有緩存文件都是在這個(gè)文件夾下面的.

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

這是class類(lèi)的析構(gòu)函數(shù),為了演示,我們輸出一個(gè)字符串表示我們釋放cache類(lèi)資源成功.

function warn($errorstring){  echo "發(fā)生錯(cuò)誤:
".$errorstring."
";  }

這個(gè)方法輸出錯(cuò)誤信息:

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;  }

這個(gè)方法返回當(dāng)前url的信息,這是我看國(guó)外很多人的cms系統(tǒng)這樣做,主要是緩存x.PHP?page=1,x.PHP?page=2,等這種文件的,這里列出是為了擴(kuò)展的這個(gè)cache類(lèi)功能的。

function cache_page($pageurl,$pagedata){   if(!$fso=fopen($pageurl,'w')){    $this->warns('無(wú)法打開(kāi)緩存文件.');//trigger_error    return false;   }   if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型鎖定    $this->warns('無(wú)法鎖定緩存文件.');//trigger_error    return false;   }   if(!fwrite($fso,$pagedata)){//寫(xiě)入字節(jié)流,serialize寫(xiě)入其他格式    $this->warns('無(wú)法寫(xiě)入緩存文件.');//trigger_error    return false;   }   flock($fso,LOCK_UN);//釋放鎖定   fclose($fso);   return true;  }

cache_page方法分別傳入的是緩存的文件名稱和數(shù)據(jù),這是把數(shù)據(jù)寫(xiě)到文件里的方法,先用fopen打開(kāi)文件,然后調(diào)用句柄鎖定這個(gè)文件,然后用fwrite寫(xiě)入文件,***釋放這個(gè)句柄,任何一步發(fā)生錯(cuò)誤將拋出錯(cuò)誤. 您可能看到這個(gè)注釋?zhuān)?/p>

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

function display_cache($cacheFile){              if(!file_exists($cacheFile)){      $this->warn('無(wú)法讀取緩存文件.');//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;  }

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

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 ".date('l dS \of F Y h:i:s A').",過(guò)期時(shí)間是:".date('l dS \of F Y h:i:s A',time()+$this->expireTime)."----------";     $this->cache_page($cacheFile,$data);   }    return $data;  }

這個(gè)函數(shù)是我們調(diào)用的方法,可以寫(xiě)成接口的方法,由傳入?yún)?shù)判斷文件存在不,文件***修改時(shí)間+expireTime的時(shí)間是不是過(guò)了當(dāng)前時(shí)間(大于的話說(shuō)明沒(méi)有過(guò)期),如果文件不存在或者已經(jīng)過(guò)期,重新加載原始數(shù)據(jù),這里,為了簡(jiǎn)單期間,我們是直接源是字符串,您可以把cache類(lèi)繼承某類(lèi),取到數(shù)據(jù)庫(kù)的數(shù)據(jù).(注釋2)

感謝各位的閱讀!關(guān)于“PHP如何實(shí)現(xiàn)緩存技術(shù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


本文標(biāo)題:PHP如何實(shí)現(xiàn)緩存技術(shù)
轉(zhuǎn)載注明:
http://weahome.cn/article/ihooej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部