未来往事

  PHP常用缓存技术 晴

Rinald 本站原创 PHP 2016/08/18 23:53
在了解php常用缓存技术之前我们先简单的理解下缓存-Cache技术概念.
理解缓存-Cache技术:
缓存就是临时文件交换区,即数据交换的缓冲区(称作Cache),电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上临时工作台一样,这样会比用时现去仓库取更方便。因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在忙完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给GPU用的缓存,硬盘上也有16M或者32M的缓存。千万不能把缓存理解成一个东西,它是一种处理方式的统称。
Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。(资料主要参考来源于百度百科)

WEB程序获取数据信息的方式主要是通过查询数据库,当数据库及访问量均不是很大的情况下不会有太大的问题。然而,随着网站的发展,数据库呈几何级数的方式增长的时候,再者加上访问量也逐渐增长,就会出现系统性能瓶颈。于是PHP缓存技术诞生了。

理解PHP缓存技术:
PHP缓存包括PHP编译缓存和PHP数据缓存两种。PHP是一种解释型语言,属于边编译边运行的那种。这种运行模式的优点是程序修改很方便,但是运行效率却很低下。PHP编译缓存针对这种情况做改进处理,使得PHP语言只要运行一次,就可以把程序的编译结果缓存起来。这样,接下来的每次运行都不需要再次编译了,这大大提高PHP运行速度。PHP数据缓存运用于PHP实际开发之中针对数据处理进行缓存,主要两大方向为:针对数据库数据进行缓存和针对PHP模板数据进行缓存。(资料主要参考来源于百度百科)

PHP编译缓存:目前最常见的PHP编译缓存工具有:APC,Accelerator,xcache(国产)等。欢迎来访未来往事博客http://fity.cn/

常用缓存方式:
1、页面缓存
A.全页面静态化缓存:也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。
用户每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些PHP缓存机制类通常有此功能。)

B.页面部分缓存:该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI(Edge Side Include)之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存(ESI技术,请百度或google)。

2、数据缓存
顾名思义,就是缓存数据的一种方式。这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。

3、查询缓存
其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示。

4、按时间变更进行缓存
检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

5、按内容变更进行缓存
这个也并非独立的缓存技术,需结合着用,就是当数据库插入内容或被修改时,即刻更新缓存文件。

6、内存缓存
Memcached是高性能的,分布式的内存对象PHP缓存机制系统,用于在动态应用中通过缓存数据库查询结果来减少数据库访问次数,提升访问速度及可扩展性。将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是 key-->value方式。具体使用请参考本博客:《未来往事:Memcache PHP测试代码》http://fity.cn/post/564/

7、php的缓冲器缓存
有eaccelerator,APC,xcache(国产),关于eaccelerator,APC,xcache使用请百度或google。
推荐阅读:《深入理解PHP Opcode缓存原理

8、基于反向代理的Web缓存,如CDN分发服务
如Nginx,SQUID,mod_proxy(apache2以上又分为mod_proxy和mod_cache)

9、DNS轮询
BIND是一款开放源码的DNS服务器软件,这个要说起来就大了,自己搜索去,大家知道有这个东西就行了。
我知道的有chinacache等大站就是这样做的,说简单点就是多服务器啦,把同一个页面或文件缓存到不同的服务器上,按南北自动解析到相关的服务器中。欢迎来访未来往事博客http://fity.cn/

作者:Rinald @『未来往事 | 记录生活,存储回忆!
原文地址:http://fity.cn/post/581/
本站采用「署名 4.0 国际(CC BY 4.0)」创作共享协议。通俗地讲,只要在使用时署名,那么使用者可以对本站所有原创内容进行转载、节选、混编、二次创作,允许商业性使用。除非在文章正文内单独说明,本站欢迎各种形式的转载。互联网技术更新很快,本站很多文章都具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请大家在转载时保留此出处信息。
发表评论
  昵称 [注册]
  密码 (游客无需密码)
  网址
  电邮(电子邮件地址不会被公开, 仅用于接收评论回复提醒使用)
OpenID登入 权限选项 表情