当前位置:   article > 正文

tp5缓存应用实例

tp5缓存

                                             tp5缓存应用实例

这里的缓存类型是File

1  第一个例子:这里举例获取网站的文章导航,当用户第一次访问时是从数据库里查询数据,然后生成缓存文件,再次访问时直接从缓存里取数据(这也是最常见的缓存应用)

 这是一个博客网站的文章分类,用户第一次访问时是从数据库获取这些,然后生成缓存,下次就是直接从缓存里取数据

主页的控制器:

  1. public function index()
  2. {
  3. //当有缓存是,直接从缓存里取出,第一次是没有的
  4. if(Cache::get('cate')){
  5. $this->assign('cate',Cache::get('cate'));
  6. }else{
  7. //用户第一次访问从数据库里取出数据,并生出缓存
  8. $cate = Db::name('cate')->select();//文章分类
  9. $this->assign('cate',$cate);
  10. // 只要有一个用户访问后
  11. // 我们可以将文章的分类写到缓存中,缓存时间为一个小时
  12. Cache::set('cate',$cate,3600);
  13. }
  14. //..省略其他数据
  15. }

 

知识延伸:如果网站后台更新了这些文章分类,该怎么办?

无论是更新,新增还是删除,如果有缓存直接重新设置缓存值即可

例如:新增一条文章分类

对应控制器:

  1. public function add(){
  2. if($this->request->isPost()){
  3. $data['name'] = input('post.name'); //分类名称
  4. $data['date'] = time(); //添加时间
  5. $num = Db::name('cate')->insert($data); //新增一条文章分类
  6. if($num){
  7. // 如果有缓存 更新缓存
  8. if(Cache::get('cate')){
  9. $cate = Db::name('cate')->select();//重新获取文章分类
  10. Cache::set('cate',$cate,3600); //更新缓存
  11. }
  12. exit(json_encode(array('code'=>1,'msg'=>'添加成功')));
  13. }
  14. }
  15. }

PS:当一个用户第一次访问此页面是从数据库里查询,再生成缓存,下次,无论是这个用户还是其他用户(不论是不是第一次访问)都是从缓存里取出数据;

2 第二个例子:用户第一次访问某篇文章时,阅读量加 +1 ,一段时间内再次访问阅读量 +1 ,过了这段时间这个用户再次访问阅读量才能再次 +1  

如果单纯的使用第一个例子的方法,那么结果就是:当第一个用户访问这篇文章后阅读量+1,而下次或者其他用户访问时就直接访问缓存文件,阅读量也不会+1(实际要的效果是其它用户访问时阅读量要+1),显然这个效果不是我们想要的。

这里的文章内容确实可以像第一个例子那样生成缓存,阅读量不能这么操作

原理:可以在用户第一次访问时,生成一个有存在时间(例如5分钟)的cookie,过了这段时间,就是这个cookie消失的时候再次访问才会+1(可以打开csdn的一篇文章查看,连续刷新查看阅读量,并没有改变,而等待一段时间后再次刷新阅读量会+1,就类似于这种效果)

控制器:details.php

  1. public function details()
  2. {
  3. if($this->request->isGet()){
  4. $id = input('id'); //文章的id
  5. $article = Db::name('article')->where('id',$id)->find();//文章的信息
  6. if($article){ //如果这篇文章存在
  7. if(!Cookie::get($article['id'])){ //有对应cookie
  8. // 阅读量加1
  9. Db::name('article')->where('id',$article['id'])->setInc('readcount');
  10. // 生成cookie
  11. Cookie::set($article['id'],sha1('随便写'),300);//时间为5分钟
  12. }
  13. }else{ //如果这篇文章不存在
  14. $this->redirect('error/index');
  15. }
  16. $this->assign('article',$article);
  17. return $this->fetch();
  18. }
  19. }

PS:这里的cookie的名是文章的id,值可以随便写

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/351351
推荐阅读
相关标签
  

闽ICP备14008679号