tp5 緩存的使用

                                      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,值可以隨便寫


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章