PHP 中 9 大快取技術總結
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、按內容變更進行快取
這個也並非獨立的快取技術,需結合著用;就是當資料庫內容被修改時,即刻更新快取檔案;
比如,一個人流量很大的商城,商品很多,商品表必然比較大,這表的壓力也比較重;我們就可以對商品顯示頁進行頁面快取;
當商家在後臺修改這個商品的資訊時,點選儲存,我們同時就更新快取檔案;那麼,買家訪問這個商品資訊時,實際上訪問的是一個靜態頁面,而不需要再去訪問資料庫;
試想,如果對商品頁不快取,那麼每次訪問一個商品就要去資料庫查一次,如果有10萬人線上瀏覽商品,那伺服器壓力就大了;
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等。
相關文章
- Redis 快取雪崩,快取擊穿和快取穿透技術方案總結Redis快取穿透
- HTML5中快取技術HTML快取
- 快取技術快取
- PHP快取技術:memcache函式詳解之一PHP快取函式
- 面試總結 —— Redis “快取穿透”、“快取擊穿”、“快取雪崩”面試Redis快取穿透
- Python快取技術Python快取
- 位元組快取技術快取
- 快取技術淺談快取
- ASP快取技術 (轉)快取
- iOS快取的總結iOS快取
- 個人總結-CPU快取快取
- HTTP 快取控制總結HTTP快取
- 使用快取的 9 大誤區快取
- 使用快取的9大誤區快取
- 個人技術棧大體思路總結
- 前端常用的快取技術前端快取
- 快取技術方案改造思考快取
- 使用快取的9大誤區(下)快取
- redis 作為快取總結Redis快取
- 位元組快取方法總結快取
- ASP.Net快取總結ASP.NET快取
- 大資料與 AI 生態中的開源技術總結大資料AI
- node實戰前端快取總結前端快取
- 專案中多級快取設計實踐總結快取
- CMake技術總結
- WPF技術總結
- BypassUAC技術總結
- easyui技術總結UI
- 最近技術總結
- Android 6.0 中的新技術總結Android
- 從WebView快取聊到Http 的快取機制 | 掘金技術徵文WebView快取HTTP
- 小工匠聊架構 - 分散式快取技術_快取設計架構分散式快取
- [php]禁用快取PHP快取
- 9大瀏覽器端快取機制分析瀏覽器快取
- 前端效能優化之快取技術前端優化快取
- 3大問題!Redis快取異常及處理方案總結Redis快取
- 深入分散式快取 — 學習總結分散式快取
- spring 快取 @Cacheable 錯誤總結Spring快取