thinkphp緩存技術(shù)詳解
本文詳細(xì)分析了thinkphp的緩存技術(shù)。分享給大家供大家參考。具體分析如下:
如果沒有緩存的網(wǎng)站是百萬(wàn)級(jí)或者千萬(wàn)級(jí)的訪問量,會(huì)給數(shù)據(jù)庫(kù)或者服務(wù)器造成很大的壓力,通過緩存,大幅減少服務(wù)器和數(shù)據(jù)庫(kù)的負(fù)荷,假如我們把讀取數(shù)據(jù)的過程分為三個(gè)層,第一個(gè)是訪問層,第一個(gè)是緩存層,第三個(gè)是數(shù)據(jù)庫(kù)存取層,如果沒有緩存層,訪問層是直接從數(shù)據(jù)庫(kù)存取層讀取數(shù)據(jù),而設(shè)置緩存后,訪問層不再是直接在數(shù)據(jù)庫(kù)存取層讀取,而是從緩存層讀取數(shù)據(jù).
我們做個(gè)簡(jiǎn)單的對(duì)比,假設(shè)一個(gè)頁(yè)面,在一個(gè)小時(shí)可被訪問100萬(wàn)次,如果這個(gè)頁(yè)面每次被訪問的時(shí)候,都直接讀取數(shù)據(jù)庫(kù)后再編譯生成,在一個(gè)小時(shí)內(nèi)將會(huì)重復(fù)性的生成100萬(wàn)次,而如果這個(gè)頁(yè)面被周期性的緩存10分鐘,也就是每間隔10分鐘緩存數(shù)據(jù)才會(huì)被生成一次,一個(gè)小時(shí)內(nèi)只會(huì)被生成6次,兩種方式一對(duì)比,效果明顯,兩種比較下服務(wù)器負(fù)荷的壓力比差別十幾萬(wàn)倍以上,緩存技術(shù)將使得網(wǎng)站負(fù)載在高峰期游刃有余.
thinkphp的緩存方式有許多種,如File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache,現(xiàn)在我來說一下File緩存。
Thinkphp緩存文件的配置
Home是我建立的前臺(tái)項(xiàng)目,在Home\Conf\config.php找到緩存的配置文件,配置如下:
return array(
'DB_TYPE'=>'mysql',
'DB_HOST'=>'127.0.0.1',
'DB_NAME'=>'w3note',
'DB_USER'=>'root',
'DB_PWD'=>'123456',
'DB_PORT'=>'3306',
'DB_PREFIX'=>'w3_',
'DATA_CACHE_TYPE'=>'file',//設(shè)置緩存方式為file
'DATA_CACHE_TIME'=>'600',//緩存周期600秒
);
?>
Thinkphp緩存函數(shù)的使用
在thinkphp中,我喜歡使用快捷緩存函數(shù)S()進(jìn)行緩存,其用法如下:
S('data',$Data,600);// 緩存$Data數(shù)據(jù)600秒
$Data = S('data');// 獲取緩存數(shù)據(jù)
S('data',NULL);// 刪除緩存數(shù)據(jù)
下面是是前臺(tái)項(xiàng)目控制器的完整代碼:
// 本類由系統(tǒng)自動(dòng)生成,僅供測(cè)試用途
class IndexAction extends Action{
public function index(){
//如果有緩存,則讀取緩存數(shù)據(jù)
//如果沒有緩存,則讀取數(shù)據(jù)庫(kù)當(dāng)中的數(shù)據(jù)放入緩存
$lists=S('lists');
if(emptyempty($lists)){
$news=M('news');
$lists=$news->select();
S('lists',$lists,600);
echo '這是直接讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)';
}
dump($list);
?>
訪問http://127.0.0.1/Home/index.php/Index/index 輸出,這是直接讀取數(shù)據(jù)庫(kù)的數(shù)據(jù):
[0] => array(12) {
["id"] => string(1) "1"
["catid"] => string(2) "13"
["title"] => string(4) "thinkphp的緩存技術(shù)"
["content"] => string(8) "thinkphp的緩存技術(shù)"
["tags"] => string(4) "緩存"
["thumb"] => string(0) ""
["description"] => string(7) "thinkphp的緩存技術(shù)"
["inputtime"] => string(10) "1348370202"
["posid"] => string(1) "1"
["ord"] => string(1) "2"
["hits"] => string(1) "1"
["status"] => string(1) "1"
}
說明,第一次運(yùn)行時(shí),會(huì)打印出如上面所示信息,刷新一下頁(yè)面后,少了“ 這是直接讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)",說明讀取的是先前生成的緩存數(shù)據(jù).
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》及《ThinkPHP常用方法總結(jié)》
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
- ThinkPHP實(shí)現(xiàn)一鍵清除緩存方法
- ThinkPHP緩存方法S()概述
- 修改ThinkPHP緩存為Memcache的方法
- Thinkphp關(guān)閉緩存的方法
- ThinkPHP靜態(tài)緩存簡(jiǎn)單配置和使用方法詳解
- ThinkPHP實(shí)現(xiàn)靜態(tài)緩存和動(dòng)態(tài)緩存示例代碼
- ThinkPHP簡(jiǎn)單使用memcache緩存的方法
- ThinkPHP框架中使用Memcached緩存數(shù)據(jù)的方法
- ThinkPHP實(shí)現(xiàn)批量刪除數(shù)據(jù)的代碼實(shí)例
- 基于ThinkPHP實(shí)現(xiàn)批量刪除
- thinkPHP批量刪除的實(shí)現(xiàn)方法分析
- TP5(thinkPHP框架)實(shí)現(xiàn)后臺(tái)清除緩存功能示例
相關(guān)文章
laravel實(shí)現(xiàn)登錄時(shí)監(jiān)聽事件,添加登錄用戶的記錄方法
今天小編就為大家分享一篇laravel實(shí)現(xiàn)登錄時(shí)監(jiān)聽事件,添加登錄用戶的記錄方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
使用PHP導(dǎo)出Redis數(shù)據(jù)到另一個(gè)Redis中的代碼
這篇文章主要介紹了使用PHP導(dǎo)出Redis數(shù)據(jù)到另一個(gè)Redis中的方法,需要的朋友可以參考下2014-03-03
php如何計(jì)算兩坐標(biāo)點(diǎn)之間的距離
這篇文章主要為大家詳細(xì)介紹了php如何計(jì)算兩坐標(biāo)點(diǎn)之間的距離,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
CI框架實(shí)現(xiàn)創(chuàng)建自定義類庫(kù)的方法
這篇文章主要介紹了CI框架實(shí)現(xiàn)創(chuàng)建自定義類庫(kù)的方法,結(jié)合實(shí)例形式分析了CI框架創(chuàng)建自定義類庫(kù)的相關(guān)原理、步驟、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2018-12-12

