天天看點

PHP中的九大緩存技術

1、全頁面靜态化緩存

也就是将頁面全部生成html靜态頁面,使用者通路時直接通路的靜态頁面,而不會去走php伺服器解析的流程。此種方式,在CMS系統中比較常見,比如dedecms;

一種比較常用的實作方式是用輸出緩存:

PHP中的九大緩存技術

2、頁面部分緩存

該種方式,是将一個頁面中不經常變的部分進行靜态緩存,而經常變化的塊不緩存,最後組裝在一起顯示;可以使用類似于ob_get_contents的方式實作,也可以利用類似ESI之類的頁面片段緩存政策,使其用來做動态頁面中相對靜态的片段部分的緩存(ESI技術,請baidu,此處不詳講)。

該種方式可以用于如商城中的商品頁;

3、資料緩存

顧名思義,就是緩存資料的一種方式;比如,商城中的某個商品資訊,當用商品id去請求時,就會得出包括店鋪資訊、商品資訊等資料,此時就可以将這些資料緩存到一個php檔案中,檔案名包含商品id來建一個唯一标示;下一次有人想檢視這個商品時,首先就直接調這個檔案裡面的資訊,而不用再去資料庫查詢;其實緩存檔案中緩存的就是一個php數組之類;

Ecmall商城系統裡面就用了這種方式;

4、查詢緩存

其實這跟資料緩存是一個思路,就是根據查詢語句來緩存;将查詢得到的資料緩存在一個檔案中,下次遇到相同的查詢時,就直接先從這個檔案裡面調資料,不會再去查資料庫;但此處的緩存檔案名可能就需要以查詢語句為基點來建立唯一标示;

按時間變更進行緩存

其實,這一條不是真正的緩存方式;上面的2、3、4的緩存技術一般都用到了時間變更判斷;就是對于緩存檔案您需要設一個有效時間,在這個有效時間内,相同的通路才會先取緩存檔案的内容,但是超過設定的緩存時間,就需要重新從資料庫中擷取資料,并生産最新的緩存檔案;比如,我将我們商城的首頁就是設定2個小時更新一次;

5、按内容變更進行緩存

這個也并非獨立的緩存技術,需結合着用;就是當資料庫内容被修改時,即刻更新緩存檔案;

比如,一個人流量很大的商城,商品很多,商品表必然比較大,這表的壓力也比較重;我們就可以對商品顯示頁進行頁面緩存;

當商家在背景修改這個商品的資訊時,點選儲存,我們同時就更新緩存檔案;那麼,買家通路這個商品資訊時,實際上通路的是一個靜态頁面,而不需要再去通路資料庫;

試想,如果對商品頁不緩存,那麼每次通路一個商品就要去資料庫查一次,如果有10萬人線上浏覽商品,那伺服器壓力就大了;

6、記憶體式緩存

提到這個,可能大家想到的首先就是Memcached;memcached是高性能的分布式記憶體緩存伺服器。 一般的使用目的是,通過緩存資料庫查詢結果,減少資料庫通路次數,以提高動态Web應用的速度、 提高可擴充性。

它就是将需要緩存的資訊,緩存到系統記憶體中,需要擷取資訊時,直接到記憶體中取;比較常用的方式就是 key–>value方式;

PHP中的九大緩存技術

7、apache緩存子產品

apache安裝完以後,是不允許被cache的。如果外接了cache或squid伺服器要求進行web加速的話,就需要在htttpd.conf裡進行設定,當然前提是在安裝apache的時候要激活mod_cache的子產品。

安裝apache時:./configure –enable-cache –enable-disk-cache –enable-mem-cache

8、php APC緩存擴充

Php有一個APC緩存擴充,windows下面為php_apc.dll,需要先加載這個子產品,然後是在php.ini裡面進行配置:

PHP中的九大緩存技術

9、Opcode緩存

我們知道,php的執行流程可以用下圖來展示:

PHP中的九大緩存技術

首先php代碼被解析為Tokens,然後再編譯為Opcode碼,最後執行Opcode碼,傳回結果;是以,對于相同的php檔案,第一次運作時可以緩存其Opcode碼,下次再執行這個頁面時,直接會去找到緩存下的opcode碼,直接執行最後一步,而不再需要中間的步驟了。

比較知名的是XCache、Turck MM Cache、PHP Accelerator等。