PHP常用緩存技術的總結,關於‘存儲’的那些必備知識。
1、全頁面靜態化緩存:將頁面全部生成為HTML靜態頁面,用戶訪問時直接訪問靜態頁面,不走PHP服務器的解析流程。此種方式在CMS系統中比較常見,如dedecms。
實現方法:輸出緩存
ob_start()--打開“輸出控制緩衝”;
some code --要運行的代碼;
$content=ob_get_contents()--返回“輸出緩衝區的內容”;
some code --使用file_put_contents()等函數將返回的數據寫入HTML文件;
ob_clearn()--清空“輸出緩衝區”;
2、頁面部分緩存:將頁面中不常變動的部分進行靜態化緩存,而經常變化的部分不緩存,最後組裝在一起顯示;可以使用類似ob_get_contents()的方式實現,也可以利用類似ESI之類的頁面片段緩存策略,使其用來做動態頁面中相對靜態的片段部分的緩存。該緩存方式常用與商城中的商品頁。
3、數據緩存:緩存數據的一種方式。比如,商城中的某個商品信息,當用商品id去請求時,就會得出包括店鋪信息、商品信息等數據,此時就可以將這些 數據緩存到一個php文件中,文件名包含商品id來建一個唯一標示;下一次有人想查看這個商品時,首先就直接調這個文件裡面的信息,而不用再去數據庫查 詢;其實緩存文件中緩存的就是一個php數組之類;Ecmall商城系統裡面就用了這種方式;
4、查詢緩存:根據查詢來進行緩存。將查詢得到的數據緩存在一個文件中,下次遇到相同的查詢時,就直接先從這個文件裡面調數據,不再去查數據庫;但此處的緩存文件名可能就需要以查詢語句為基點來建立唯一標示.
注意:以上幾種緩存方式都需要對緩存的文件設置一個有效時間,在這個時間內,相同的訪問會先取緩存文件的內容,超過有效時間後就重新從數據庫中獲取數據,並生成新的緩存文件。
5、內存式緩存:使用redis,memcached等nosql數據庫設置PHP緩存,通過緩存查詢結果,來減少數據庫的訪問次數,從而提高網站的響應速度。
6、apache緩存模塊:apache安裝完以後,是不允許被cache的。如果外接了cache或squid服務器要求進行web加速的話,就需要在htttpd.conf裡進行設置,當然前提是在安裝apache的時候要激活mod_cache的模塊。
安裝apache時:./configure –enable-cache –enable-disk-cache –enable-mem-cache
7、PHP APC緩存擴展:使用PHP中的APC擴展來進行緩存
8、Opcode:首先php代碼被解析為Tokens,然後再編譯為Opcode碼,最後執行Opcode碼,返回結果;所以,對於相同的php文件,第一次運行時 可以緩存其Opcode碼,下次再執行這個頁面時,直接會去找到緩存下的opcode碼,直接執行最後一步,而不再需要中間的步驟了。比較知名的是XCache、Turck MM Cache、PHP Accelerator等。
什麼是memcached?
Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。
memcached的特點:
1.全內存運轉
2.哈希方式存儲
3.簡單文本協議進行數據通信
4.只操作字符型數據
5.其它類型數據由應用解釋,序列化以及反序列化
6.集群也由應用進行控制,採用一致性散列(哈希)算法
Memcached的缺點
純內存操作,關機後數據全部丟失
保存字節數據,數據類型貧乏
LRU算法導致數據不可控的丟失
一致性處理簡單
應用端太厚,服務器端太薄
應用場景有限,難以被看成是完整的數據庫產品
什麼是redis?
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
redis的特點
Redis跟memcache不同的是,儲存在Redis中的數據是持久化的,斷電或重啟後,數據也不會丟失。因為Redis的存儲分為內存存儲、磁盤存儲和log文件三部分,重啟後,Redis可以從磁盤重新將數據加載到內存中,這些可以通過配置文件對其進行配置,正因為這樣,Redis才能實現持久化。
什麼是MongoDB?
MongoDB 是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDb特點?
它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:
*面向集合存儲,易存儲對象類型的數據。
*模式自由。
*支持動態查詢。
*支持完全索引,包含內部對象。
*支持查詢。
*支持複製和故障恢復。
*使用高效的二進制數據存儲,包括大型對象(如視頻等)。
*自動處理碎片,以支持雲計算層次的擴展性。
*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
*文件存儲格式為BSON(一種JSON的擴展)。
*可通過網絡訪問。
閱讀更多 美食代碼喵 的文章