tp5缓存应用实例
这里的缓存是文件。
实例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,值可以随便写
原文链接:( https://blog.csdn.net/qq_41179401/article/details/86290293)