日常開發之快取技術

2022-05-13 03:01:30 字數 2997 閱讀 1326

對於乙個訪問量龐大的**來說,快取機制是很重要的提速和優化手段。

1、全頁面靜態化快取

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

一種比較常用的實現方式是用輸出快取:

ob_start() 

******要執行的*********$content =ob_get_contents();

****將快取內容寫入html檔案*****ob_end_clean();

2、頁面部分快取該種方式,是將乙個頁面中不經常變的部分進行靜態快取,而經常變化的塊不快取,最後組裝在一起顯示;可以使用類似於ob_get_contents的方式實現,也可以利用類似esi之類的頁面片段快取策略,使其用來做動態頁面中相對靜態的片段部分的快取(esi技術,請baidu,此處不詳講)。

該種方式可以用於如**中的商品頁;

3、資料快取

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

ecmall**系統裡面就用了這種方式;

4、查詢快取

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

按時間變更進行快取

其實,這一條不是真正的快取方式;上面的2、3、4的快取技術一般都用到了時間變更判斷;就是對於快取檔案您需要設乙個有效時間,在這個有效時間內,相同的訪問才會先取快取檔案的內容,但是超過設定的快取時間,就需要重新從資料庫中獲取資料,並生產最新的快取檔案;比如,我將我們**的首頁就是設定2個小時更新一次;

5、按內容變更進行快取

這個也並非獨立的快取技術,需結合著用;就是當資料庫內容被修改時,即刻更新快取檔案;

比如,乙個**量很大的**,商品很多,商品表必然比較大,這錶的壓力也比較重;我們就可以對商品顯示頁進行頁面快取;

當商家在後台修改這個商品的資訊時,點選儲存,我們同時就更新快取檔案;那麼,買家訪問這個商品資訊時,實際上訪問的是乙個靜態頁面,而不需要再去訪問資料庫;

6、記憶體式快取

提到這個,可能大家想到的首先就是memcached;memcached是高效能的分布式記憶體快取伺服器。 一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態web應用的速度、 提高可擴充套件性。

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

<?php 

$memcachehost

= '192.168.6.191';

$memcacheport = 11211

; $memcachelife = 60

; $memcache = new

memcache;

$memcache->connect($memcachehost,$memcacheport) or die ("

could not connect

");

$memcache->set('

key','

快取的內容

');

$get = $memcache->get($key); //

獲取資訊

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裡面進行配置:

[apc]

extension=php_apc.dll

apc.rfc1867 =on

upload_max_filesize =100m

post_max_size =100m

apc.max_file_size =200m

upload_max_filesize =1000m

post_max_size =1000m

max_execution_time = 600

;每個php頁面執行的最大時間值(秒),預設30秒 max_input_time = 600 ; 每個php頁面接收資料所需的最大時間,預設60 memory_limit = 128m ; 每個php頁面所吃掉的最大記憶體,預設8m

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

首先php**被解析為tokens,然後再編譯為opcode碼,最後執行opcode碼,返回結果;所以,對於相同的php檔案,第一次執行時可以快取其opcode碼,下次再執行這個頁面時,直接會去找到快取下的opcode碼,直接執行最後一步,而不再需要中間的步驟了。

比較知名的是xcache、turck mm cache、php accelerator等。

日常開發技巧 二

經常寫一些比較長的查詢,有時會有幾行,然後發現開頭的地方有錯誤,這個時候可能要按住箭頭,乙個乙個字元地把游標移到開頭去,其實可以用快捷鍵去實現。經常會做這樣的事 在console中查詢乙個物件,忘了把結果儲存在乙個變數裡,然後重複執行。其實每次在console裡面執行乙個命令或者是功能,其返回值都會...

Mysql日常開發注意要點

1 mysql儲存引擎介紹 myisam 低版本mysql預設的mysql外掛程式式儲存引擎,儲存檔案易損壞,不支援事務。innodb 目前預設的mysql儲存引擎,用於事務處理應用程式,具有眾多特性,包括acid事務支援 建表語句建議使用 engine innodb 字段,例如 create ta...

PHP日常開發小技巧

php批量取得checkbox的值 1 命名 2 使用 當計畫當作sql指令的一部分時 如果參與控制的字段是數值型的,則 if empty post checkbox 如果參與控制的字段是數值型的,則 if empty post checkbox php判斷form表單是否提交 if action ...