一. 數據緩存
在 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}'),
文章列表