和静态页面一样,缓存曾经一度是我害怕触碰的技术之一,可是没办法啊,找工作的时候30%的公司都要求会缓存技术,哎,没办法啊!
现在想想缓存有什么呢?其实,静态页面也是缓存的一种,反正都是为了加速访问速度的,我也曾经很苦恼从百度上一搜"php 缓存技术",搜到的都是些什么东西啊,写的全介绍的都不细,写的细的倒是直接上代码,但太片面,我只能说一句缓存不是只有一种的,当然了我也不是很懂,我只能把我所有知道的全部说出来。
为什么要用缓存这是众所周知的,但缓存也是分好多种的。百度百科中说php缓存分为php编译缓存和数据缓存,说实话我不知道编译缓存是什么东西,我在这里着重说的是数据缓存。而且我们平时说的缓存绝大多数也都是数据缓存,另外,数据缓存也分为数据库缓存和针对php模板数据缓存。
第一种,我们最常见的,好像算不上是缓存吧,这个我真不太懂,严格意义上来说是不是缓存,恩,应该是的,静态缓存。就是静态页面,直接将页面静态处理,这是我认为最简单的加速网站访问的方式了。
第二种,页面缓存 我看好多文档上写了页面缓存然后下面在介绍smarty,我不知道是我理解错了还是他们理解错了,smarty中的缓存不就是页面缓存吗?首先,肯定要启用缓存,然后设置缓存失效时间,访问页面的时候如果过了失效时间就重新访问数据库然后生成缓存,如果没有过就访问缓存,这种方法跟生成静态页面非常相似,但比静态页面方便,只需要配置几个参数就可以实现。
具体语法:实例化smarty类,然后设置缓存参数,首先是要
启用缓存 $cacheing = 1;启用缓存
设置缓存目录:$cache_dir = "";
设置缓存时间 $cache_lifetime = 3600;一个小时
然后在访问页面的时候就会生成缓存了,存放在你指定的目录中下一次访问的时候要进行判断,如果过了缓存时间的话就重新读取数据库
然后生成缓存,如果没过的话就读取缓存的内容。
if(!$smarty->is_cached('index.html',$cache_id)){
}
这里在介绍一下smarty中的display,以前我都没用注意到这个问题,只是简单的出入一个参数,就是$smarty->display('index.html');但现
在会出现这样一种情况,如果是分页页面的话会怎样呢?很明显,因为用的是同一个模板Index.html,在用户访问的时候一判断有缓存,所以所有的分页如果你启用缓存的话显示的都是同一页。那如何让分页能够都被缓存呢?这里需要传入一些可以唯一标示的参数用来区别
比如分页的时候我们一般是这么写的www.kuxiewang.com/category.php?id=12?page=2很明显,$page是传入的唯一的参数,这里可以用
$page作为唯一的标识,$smarty->display('index.html',$_get['page']);这样在访问页面的时候就会能够对分页的文章进行缓存了,但这时 还有一种情况如果多个栏目下都有同一个$page怎么办呢?比如书体育栏目下有个$page,财经栏目下也有个$Page,那这样这个两个页面
就会一样了,所以要找一个唯一的标识,浏览器地址是最好的,所以说$smarty->display('index.html',$_SERVER['REQUEST']);
第三种,数据缓存。在数据库中启用缓存,现在我还不太清楚具体语法,只是知道原理。这里与缓存模板文件不同的是,前两种缓存都放在硬盘中,而这种情况是放在内存中的,当访问数据库的时候,如果在缓存中有相同的查询就会调用缓存中内容。