赞
踩
这里的缓存类型是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,值可以随便写
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。