ThinkPHP的緩存技術

若是沒有緩存的網站是百萬級或者千萬級的訪問量,會給數據庫或者服務器形成很大的壓力,經過緩存,大幅減小服務器和數據庫的負荷。假如咱們 把讀取數據的過程分爲三個層,第一個是訪問層,第一個是緩存層,第三個是數據庫存取層。若是沒有緩存層,訪問層是直接從數據庫存取層讀取數據,而設置緩存 後,訪問層再也不是直接在數據庫存取層讀取,而是從緩存層讀取數據。
咱們作個簡單的對比,假設一個頁面,在一個小時可被訪問100萬次,如 果這個頁面每次被訪問的時候,都直接讀取數據庫後再編譯生成,在一個小時內將會重複性的生成100萬次;而若是這個頁面被週期性的緩存10分鐘,也就是每 間隔10分鐘緩存數據纔會被生成一次,一個小時內只會被生成6次,兩種方式一對比,效果明顯,兩種比較下服務器負荷的壓力比差異十幾萬倍以上,緩存技術將 使得網站負載在高峯期遊刃有餘。php

thinkphp的緩存方式有許多種,如File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache,如今我來講一下File緩存。mysql

 

Thinkphp緩存文件的配置sql

 

Home是我創建的前臺項目,在Home\Conf\config.php找到緩存的配置文件,配置以下:thinkphp

 

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"
}
...

說明,第一次運行時,會打印出如上面所示信息,刷新一下頁面後,少了「 這是直接讀取數據庫的數據",說明讀取的是先前生成的緩存數據。

相關文章
相關標籤/搜索