亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP網(wǎng)頁(yè)緩存技術(shù)優(yōu)點(diǎn)及代碼實(shí)例

瀏覽:92日期:2022-09-09 14:26:58

前臺(tái)靜態(tài)化:把動(dòng)態(tài)頁(yè)面解析后保存為靜態(tài)頁(yè)面

文件緩存:把查詢結(jié)果保存為文件,XML

內(nèi)存緩存:memcache

php緩存器:XCache、eaccelerator等

Memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。簡(jiǎn)單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。Memcache是danga的一個(gè)項(xiàng)目,最早是LiveJournal 服務(wù)的,最初為了加速 LiveJournal 訪問速度而開發(fā)的,后來被很多大型的網(wǎng)站采用。Memcached是以守護(hù)程序方式運(yùn)行于一個(gè)或多個(gè)服務(wù)器中,隨時(shí)會(huì)接收客戶端的連接和操作。

XCache 是一個(gè)開源的 opcode 緩存器/優(yōu)化器, 這意味著他能夠提高您服務(wù)器上的 PHP 性能. 他通過把編譯 PHP 后的數(shù)據(jù)緩沖到共享內(nèi)存從而避免重復(fù)的編譯過程, 能夠直接使用緩沖區(qū)已編譯的代碼從而提高速度. 通常能夠提高您的頁(yè)面生成速率 2 到5 倍, 降低服務(wù)器負(fù)載.

******************************************************************************************************************************************************

1、普遍緩存技術(shù):

數(shù)據(jù)緩存:這里所說的數(shù)據(jù)緩存是指數(shù)據(jù)庫(kù)查詢PHP緩存機(jī)制,每次訪問頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存數(shù)據(jù)是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),并把查詢結(jié)果序列化后保存到文件中,以后同樣的查詢結(jié)果就直接從緩存表或文件中獲得。

用的最廣的例子看Discuz的搜索功能,把結(jié)果ID緩存到一個(gè)表中,下次搜索相同關(guān)鍵字時(shí)先搜索緩存表。

舉個(gè)常用的方法,多表關(guān)聯(lián)的時(shí)候,把附表中的內(nèi)容生成數(shù)組保存到主表的一個(gè)字段中,需要的時(shí)候數(shù)組分解一下,這樣的好處是只讀一個(gè)表,壞處就是兩個(gè)數(shù)據(jù)同步會(huì)多不少步驟,數(shù)據(jù)庫(kù)永遠(yuǎn)是瓶頸,用硬盤換速度,是這個(gè)的關(guān)鍵點(diǎn)。

2、 頁(yè)面緩存:

每次訪問頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存頁(yè)面文件是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),顯示頁(yè)面并同時(shí)生成緩存頁(yè)面文件,這樣下次訪問的時(shí)候頁(yè)面文件就發(fā)揮作用了。(模板引擎和網(wǎng)上常見的一些PHP緩存機(jī)制類通常有此功能)

3、 時(shí)間觸發(fā)緩存:

檢查文件是否存在并且時(shí)間戳小于設(shè)置的過期時(shí)間,如果文件修改的時(shí)間戳比當(dāng)前時(shí)間戳減去過期時(shí)間戳大,那么就用緩存,否則更新緩存。

4、 內(nèi)容觸發(fā)緩存:

當(dāng)插入數(shù)據(jù)或更新數(shù)據(jù)時(shí),強(qiáng)制更新PHP緩存機(jī)制。

5、 靜態(tài)緩存:

這里所說的靜態(tài)緩存是指靜態(tài)化,直接生成HTML或XML等文本文件,有更新的時(shí)候重生成一次,適合于不太變化的頁(yè)面,這就不說了。

以上內(nèi)容是代碼級(jí)的解決方案,我直接CP別的框架,也懶得改,內(nèi)容都差不多,很容易就做到,而且會(huì)幾種方式一起用,但下面的內(nèi)容是服務(wù)器端的緩存方案,非代碼級(jí)的,要有多方的合作才能做到

6、 內(nèi)存緩存:

Memcached是高性能的,分布式的內(nèi)存對(duì)象PHP緩存機(jī)制系統(tǒng),用于在動(dòng)態(tài)應(yīng)用中減少數(shù)據(jù)庫(kù)負(fù)載,提升訪問速度。

7、 php的緩沖器:

有eaccelerator, apc, phpa,xcache,這個(gè)這個(gè)就不說了吧,搜索一堆一堆的,自己看啦,知道有這玩意就OK

8、 MYSQL緩存:

這也算非代碼級(jí)的,經(jīng)典的數(shù)據(jù)庫(kù)就是用的這種方式,看下面的運(yùn)行時(shí)間,0.09xxx之類的

9、 基于反向代理的Web緩存:

如Nginx,SQUID,mod_proxy(apache2以上又分為mod_proxy和mod_cache)

10、 DNS輪詢:  

BIND是一款開放源碼的DNS服務(wù)器軟件,這個(gè)要說起來就大了,自己搜索去,大家知道有這個(gè)東西就行了。

我知道的有chinacache等大站就是這樣做的,說簡(jiǎn)單點(diǎn)就是多服務(wù)器啦,把同一個(gè)頁(yè)面或文件緩存到不同的服務(wù)器上,按南北自動(dòng)解析到相關(guān)的服務(wù)器中。

PHP網(wǎng)頁(yè)緩存實(shí)例

ob_start():頁(yè)面緩存開始的標(biāo)志,此函數(shù)一下的內(nèi)容直至ob_end_flush()或者ob_end_clean()都保存在頁(yè)面緩存中; ob_get_contents():用來獲取頁(yè)面緩存中的內(nèi)容,獲取到以后呢,我們就可以想怎么處理這些內(nèi)容都行了,過濾字段啦,匹配內(nèi)容啦,都可以~~~ :) ob_end_flush():表示頁(yè)面緩存結(jié)束。并且經(jīng)我驗(yàn)證,緩存的內(nèi)容將輸出到當(dāng)前頁(yè)面上,也就是可以顯示緩存內(nèi)容。

用此三個(gè)php函數(shù),就可以實(shí)現(xiàn)強(qiáng)大的功能。如果數(shù)據(jù)庫(kù)查詢量較大,可以用cache來解決這個(gè)問題。

首先,設(shè)定過期時(shí)間,如果要求緩存文件2個(gè)小時(shí)過期,就可以設(shè)定cache_time為3600*2;通過filectime()來獲取緩存文件的創(chuàng)建時(shí)間(或 filemtime()獲取修改時(shí)間),如果當(dāng)前時(shí)間跟文件的創(chuàng)建時(shí)間超過限定的過期時(shí)間,就可以通過上面三個(gè)函數(shù),首先從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),然后開始緩存ob_start(),然后把要生成的頁(yè)面的html代碼寫在緩存中,緩存結(jié)束后通過ob_get_contents()獲取到緩存的內(nèi)容,然后通過fwrite把緩存內(nèi)容寫到靜態(tài)頁(yè)面html。

如果未過期,直接讀取cache中的靜態(tài)頁(yè)面即可,避免了大量的數(shù)據(jù)庫(kù)訪問。

<?php$_time =10;$dir='D:php'; function cache_start($_time, $dir){ $cachefile = $dir.’/’.sha1($_SERVER[’REQUEST_URI’]).’.html’; $cachetime = $_time; ob_start(); if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime)) { include($cachefile); ob_end_flush(); exit; }} function cache_end($dir){ $cachefile = $dir.’/’.sha1($_SERVER[’REQUEST_URI’]).’.html’; $fp = fopen($cachefile, ’w’); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_flush();} cache_start($_time, $dir);//以下是輸出的內(nèi)容,放在cache_start和cache_end兩個(gè)方法之間for ($i=0;$i<5;$i++){ echo $i; sleep(1);}cache_end($dir);?>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 国产高清在线精品一区免费97 | 国产成人精品亚洲2020 | 欧美一级毛片一 | 91探花在线视频 | aa一级黄色片 | 亚洲 欧美 国产 制服 动漫 | 国产精品亚洲片在线不卡 | 成人1000部免费观看视频 | 精品在线第一页 | 免费观看一区二区 | 亚洲综合视频一区 | 日本免费一区二区视频 | 1024你懂的国产日韩欧美 | 1000部国产成人免费视频 | 国产精品女同一区二区久久夜 | 无码精品一区二区三区免费视频 | 国产精品9999久久久久 | 久久精品国产久精国产果冻传媒 | 欧美亚洲在线视频 | 国产美女亚洲精品久久久毛片 | 国产精品久久久久久久久夜色 | 日韩欧美一区二区三区在线观看 | 麻豆国产精品va在线观看不卡 | 国产精品第九页 | 麻豆精品视频 在线视频 | 91精品国产高清91久久久久久 | 生活片一级播放免费 | 东京不太热视频高清在线 | 黄色a大片 | 日美一级毛片 | 亚洲精品视频在线免费 | 57pao一国产成永久免费 | 秘书上班和老板啪啪中文字幕 | 国内不卡一二三四区 | 手机日韩理论片在线播放 | 日本黄色生活片 | 狠狠狠色丁香婷婷综合久久五月 | 91在线免费视频 | 国产精品主播在线观看 | 久久综合给合久久狠狠狠97色69 | a4yy欧美一区二区三区 |