ThinkPHP的緩衝技術

來源:互聯網
上載者:User

標籤:

原文:ThinkPHP的緩衝技術

如果沒有緩衝的網站是百萬級或者千萬級的訪問量,會給資料庫或者伺服器造成很大的壓力,通過緩衝,大幅減少伺服器和資料庫的負荷。假如我們 把讀取資料的過程分為三個層,第一個是訪問層,第一個是緩衝層,第三個是資料庫存取層。如果沒有緩衝層,訪問層是直接從資料庫存取層讀取資料,而設定緩衝 後,訪問層不再是直接在資料庫存取層讀取,而是從緩衝層讀取資料。
我們做個簡單的對比,假設一個頁面,在一個小時可被訪問100萬次,如 果這個頁面每次被訪問的時候,都直接讀取資料庫後再編譯產生,在一個小時內將會重複性的產生100萬次;而如果這個頁面被周期性的緩衝10分鐘,也就是每 間隔10分鐘快取資料才會被產生一次,一個小時內只會被產生6次,兩種方式一對比,效果明顯,兩種比較下伺服器負荷的壓力比差別十幾萬倍以上,緩衝技術將 使得網站負載在高峰期遊刃有餘。

thinkphp的緩衝方式有許多種,如File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache,現在我來說一下File緩衝。

 

Thinkphp快取檔案的配置

 

Home是我建立的前台項目,在Home\Conf\config.php找到緩衝的設定檔,配置如下:

 

01 <?php
02 /**
03  * 設定檔
04  */
05  return array(
06  ‘DB_TYPE‘=>‘mysql‘,
07  ‘DB_HOST‘=>‘127.0.0.1‘,
08  ‘DB_NAME‘=>‘w3note‘,
09  ‘DB_USER‘=>‘root‘,
10  ‘DB_PWD‘=>‘123456‘,
11  ‘DB_PORT‘=>‘3306‘,
12  ‘DB_PREFIX‘=>‘w3_‘,
13  ‘DATA_CACHE_TYPE‘=>‘file‘,//設定緩衝方式為file
14  ‘DATA_CACHE_TIME‘=>‘600‘,//緩衝周期600秒
15  
16  
17 );
18 ?>

 

 

Thinkphp緩衝函數的使用

 

在thinkphp中,我喜歡使用快捷緩衝函數S()進行緩衝; 其用法如下:

 

S(‘data‘,$Data);//使用data標識緩衝$Data資料

 

S(‘data‘,$Data,600);// 緩衝$Data資料600秒

 

$Data = S(‘data‘);// 擷取快取資料

 

S(‘data‘,NULL);// 刪除快取資料

 

下面是是前台項目控制器的完整代碼

01 <?php
02 // 本類由系統自動產生,僅供測試用途
03 class IndexAction extends Action{
04     public function index(){
05  
06       //如果有緩衝,則讀取快取資料
07       //如果沒有緩衝,則讀取資料庫當中的資料放入緩衝
08       $lists=S(‘lists‘);
09  
10             if(empty($lists)){
11  
12         $news=M(‘news‘);
13  
14         $lists=$news->select();
15  
16         S(‘lists‘,$lists,600);
17  
18         echo ‘這是直接讀取資料庫的資料‘;
19  
20          }
21  
22       dump($list);

訪問http://127.0.0.1/Home/index.php/Index/index 輸出:

這是直接讀取資料庫的資料
array(10) {
[0] => array(12) {
["id"] => string(1) "1"
["catid"] => string(2) "13"
["title"] => string(4) "thinkphp的緩衝技術"
["content"] => string(8) "thinkphp的緩衝技術"
["tags"] => string(4) "緩衝"
["thumb"] => string(0) ""
["description"] => string(7) "thinkphp的緩衝技術"
["inputtime"] => string(10) "1348370202"
["posid"] => string(1) "1"
["ord"] => string(1) "2"
["hits"] => string(1) "1"
["status"] => string(1) "1"
}
...

說明,第一次運行時,會列印出如上面所示資訊,重新整理一下頁面後,少了“ 這是直接讀取資料庫的資料",說明讀取的是先前產生的快取資料。

ThinkPHP的緩衝技術

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.