tp5緩存應用實例
這裏的緩存類型是File
1 第一個例子:這裏舉例獲取網站的文章導航,當用戶第一次訪問時是從數據庫裏查詢數據,然後生成緩存文件,再次訪問時直接從緩存裏取數據(這也是最常見的緩存應用)
這是一個博客網站的文章分類,用戶第一次訪問時是從數據庫獲取這些,然後生成緩存,下次就是直接從緩存裏取數據
主頁的控制器:
public function index()
{
//當有緩存是,直接從緩存裏取出,第一次是沒有的
if(Cache::get('cate')){
$this->assign('cate',Cache::get('cate'));
}else{
//用戶第一次訪問從數據庫裏取出數據,並生出緩存
$cate = Db::name('cate')->select();//文章分類
$this->assign('cate',$cate);
// 只要有一個用戶訪問後
// 我們可以將文章的分類寫到緩存中,緩存時間爲一個小時
Cache::set('cate',$cate,3600);
}
//..省略其他數據
}
知識延伸:如果網站後臺更新了這些文章分類,該怎麼辦?
無論是更新,新增還是刪除,如果有緩存直接重新設置緩存值即可
例如:新增一條文章分類
對應控制器:
public function add(){
if($this->request->isPost()){
$data['name'] = input('post.name'); //分類名稱
$data['date'] = time(); //添加時間
$num = Db::name('cate')->insert($data); //新增一條文章分類
if($num){
// 如果有緩存 更新緩存
if(Cache::get('cate')){
$cate = Db::name('cate')->select();//重新獲取文章分類
Cache::set('cate',$cate,3600); //更新緩存
}
exit(json_encode(array('code'=>1,'msg'=>'添加成功')));
}
}
}
PS:當一個用戶第一次訪問此頁面是從數據庫裏查詢,再生成緩存,下次,無論是這個用戶還是其他用戶(不論是不是第一次訪問)都是從緩存裏取出數據;
2 第二個例子:用戶第一次訪問某篇文章時,閱讀量加 +1 ,一段時間內再次訪問閱讀量 +1 ,過了這段時間這個用戶再次訪問閱讀量才能再次 +1
如果單純的使用第一個例子的方法,那麼結果就是:當第一個用戶訪問這篇文章後閱讀量+1,而下次或者其他用戶訪問時就直接訪問緩存文件,閱讀量也不會+1(實際要的效果是其它用戶訪問時閱讀量要+1),顯然這個效果不是我們想要的。
這裏的文章內容確實可以像第一個例子那樣生成緩存,閱讀量不能這麼操作
原理:可以在用戶第一次訪問時,生成一個有存在時間(例如5分鐘)的cookie,過了這段時間,就是這個cookie消失的時候再次訪問纔會+1(可以打開csdn的一篇文章查看,連續刷新查看閱讀量,並沒有改變,而等待一段時間後再次刷新閱讀量會+1,就類似於這種效果)
控制器:details.php
public function details()
{
if($this->request->isGet()){
$id = input('id'); //文章的id
$article = Db::name('article')->where('id',$id)->find();//文章的信息
if($article){ //如果這篇文章存在
if(!Cookie::get($article['id'])){ //有對應cookie
// 閱讀量加1
Db::name('article')->where('id',$article['id'])->setInc('readcount');
// 生成cookie
Cookie::set($article['id'],sha1('隨便寫'),300);//時間爲5分鐘
}
}else{ //如果這篇文章不存在
$this->redirect('error/index');
}
$this->assign('article',$article);
return $this->fetch();
}
}
PS:這裏的cookie的名是文章的id,值可以隨便寫