文章出處

一. 數據緩存
在 ThinkPHP 中,有一個專門處理緩存的類:Cache.class.php。而我們使用的時候,
并不需要直接聲明它,直接使用一個大 S()方法即可。
系統目前已經支持的緩存類型包括:Apachenote、Apc、Db、Eaccelerator、File、
Memcache、Redis、Shmop、Sqlite、Wincache 和 Xcache。如果不初始化,會默認使用
File 文件緩存。

初始化的方法為:

1 S( array(
2 'type'=>'memcache',
3 'host'=>'127.0.0.1',
4 'port'=>'11211',
5 'prefix'=>'think',
6 'expire'=>60
7 ));

PS:如果不初始化的化,將使用默認配置使用。
type 的默認設置為: C('DATA_CACHE_TYPE');  //File
prefix 的默認設置為: C('DATA_CACHE_PREFIX');  //無
expire 的默認設置為: C('DATA_CACHE_TIME');  //0
其他參數,如果沒設置,將沒有值。

 

在 WeiBo/Home/Controller/UserController.class.php 中的代碼為:

 1 namespace Home\Controller;
 2 use Think\Controller;
 3 
 4 class UserController extends Controller {
 5     public function index()  {
 6         if(!$list=S('list'))
 7         {
 8         $user = D('User');
 9         $list = $user->select();
10         S('list',$list,10);
11        }
12         $this->assign('list',$list);
13         $this->display();
14     }
15  }

 S('list',$list,10); 就是將數據庫中獲得的數組 $list 的數據換存在 S('list') 中,10秒之后進行更新

 if(!$list=S('list')) 是判斷當獲得的數組是否緩存在 S('list') 中,不在的話就獲取數據在進行緩存

 

比如該代碼進行第一次獲取后臺數據庫數據時會有SQL語句進行獲取,之后在10秒以內,再刷新的話,則不會在對數據庫進行查詢了。

1 //刪除緩存
2 S('list',  null);

 

二. 快速緩存
如果不想設置有效期存儲,可以使用大 F()方法的快速緩存。

 1 //使用F()方法快速緩存
 2 public  function index() {
 3 if (!$list = F('list')) {
 4    $user = D('User');
 5    $list = $user->select();
 6    F('list', $list, TEMP_PATH);
 7   }
 8   $this->assign('list', $list);
 9   $this->display();
10 }

其中 F('list', $list, TEMP_PATH); 中的 TEMP_PATH 是將路徑設為

 

默認是在

 

1 //刪除緩存
2 F('list',  null);

 

三.查詢緩存

對于及時性要求不高的數據查詢,我們可以使用查詢緩存功能來提高性能。

1 //查詢SQL后緩存
2 $list = $user->cache( true)->select();

在 WeiBo/Home/Controller/UserController.class.php 中代碼樣式為:

1 public  function index() {    
2         $user = D('User');
3         $list = $user->cache(true)->select();
4         $this->assign('list', $list);
5         $this->display();
6     }
1 //指定緩存的Key會更加高效
2 $list = $user->cache('cache_user')->select();
1 //可以設定過期時間和其他緩存方式
2 $list = $user->cache('cache_user', 10, 'xcache')->select();

PS:如果沒有安裝 xcache 緩存,則會報錯。而過期時間,必須關閉調試模式方可有效。

這里的緩存方式可以設置為:

 Apachenote、Apc、Db、Eaccelerator、File、 Memcache、Redis、Shmop、Sqlite、Wincache 和 Xcache 

中任何一種。

1 //獲取緩存
2 var_dump(S('cache_user'));
1 //刪除緩存
2 S('cache_user',  null);

除了查詢緩存之外,對于 SQL 查詢語句本身也有解析緩存,就是把 SQL 語句給緩存下
來,下次執行就不需要再解析了。當然,如果使用了查詢緩存本身,由于已經將內容緩存,
所以解析緩存基本上用的較少。

1 //SQL解析緩存
2 'DB_SQL_BUILD_CACHE' =>  true,

 

四. 靜態緩存
所謂靜態緩存,就是第一次訪問 PHP 時生成一個純靜態文件。當第二次訪問時,就直
接訪問這個靜態文件。特別適合類似于 CMS 系統這種頁面狀態變化較少的程序。

在 WeiBo/Common/Conf/config.php 中進行配置:

1 //開啟靜態緩存
2 'HTML_CACHE_ON'=> true,
1 //全局緩存時間60秒
2 'HTML_CACHE_TIME'=>60,
1 //緩存的后綴
2 'HTML_FILE_SUFFIX'=>'.html',
//緩存規則
'HTML_CACHE_RULES'=> array(
//控制器:方法 //模塊_控制器_方法_ID,局部60秒
'User:index'=> array('{:module}_{:controller}_{:action}_{id}',60),
),

配置好上述四條后,在WeiBo目錄下會多出一個Html文件,這里存放的就是緩存文件

這時的url為 http://localhost/demo39/index.php/User/index/id/5 最后的 id/5 是平添上去的,沒有任何意義,

這時在Html文件夾下生成一個名為 Home_User_index_5.html 的緩存文件

是按照配置中 {:module}_{:controller}_{:action}_{id} 的形式生成的,

如果該配置中的_全部改成/,則生成的形式為:

這時的緩存文件為5.html

 

除了上面的緩存規則,還有其他的緩存規格選擇:

1 //方法名
2 'index'=> array('{id}', 60),
1 //控制器: //User目錄下的 方法_ID
2 'User:'=> array('User/{:action}_{id}', 60),
1 //控制器名:方法名
2 'User:index'=> array('{id}', 60),
1 //將當前地址加密作為文件名
2 '*'=> array('{$_SERVER.REQUEST_URI|md5}'),

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()