- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PHP 缓存相关知识学习笔记
由头
最近,周围的几个同事跳槽升级,弄的自己也心里很痒。关心了一下相关面试笔试的内容,大部分地方对于PHP
的缓存技术都有过询问。
之前自己做的几个项目,都是简单的B/S 架构的存取数据库数据的控制面板的咚咚,用户量撑死也就在几百到
几天人不等。基本上不用考虑性能和优化的问题。( 无论是Web 的优化,还是数据库的优化 )
不过,真正大的公司和PHP 的项目,都是要考虑这方面的东西的。因此,就揪出这个知识点出来突击一下。
关于PHP 的缓存
为什么要缓存
为什么需要缓存,缓存的目的就是加速页面的载入,因此使用缓存之后,你的请求将会直接去获取 html 文件,
传统的动态页面从数据库中获取数据,然后用程序 将数据显示出来的这个过程就被绕过去了,而这个过程是最消
耗系统资源的过程,静态页面传送过程中,系统 I/O 所占用的资源相比之下就可以忽略了。当然,更 传统的其实还
是静态页面,因为它出现在动态页面之前。有人说用缓存更新不及时,不够快,所以很不方便,这也是很有道理的,
但是仅仅是因为这样就放弃使用缓存,或许不太划算,特别是在你服务器压力比较大的情况下。
什么是缓存
顾名思义,缓存是一块设定了缓冲功能的内存区域,用于提供数据的高速缓冲。无论是针对硬件的CPU 的缓存,
硬盘的缓存。都是起到减少不比要的I/O 访问,提高数据访问速度的目的。
缓存的形式
字面上,缓存就应该是内存的一个部分。但是,也有其他形式的缓存。
CPU 上的缓存可以有2 到3 级RAM,是现在CPU 设计中一个重要的组成部分。同样,硬盘上的Flash RAM 芯片,
承担了缓存的作用。
而针对应用软件系统,例如:Memcached 这样的软件,从物理内存中划去了一部分空间,为各种应用程序提供
缓存服务。
针对特殊的Web + DB 的这种B/S 业务系统,还有类似的生成静态页,减少数据库存取I/O 操作的缓存方式。
PHP 缓存的具体方法
针对PHP 这种具体的B/S 架构的脚本语言,有几种常见的缓存形式。
文件缓存:
文件缓存是PHP 缓存的十分常见的一种形式。其主要目的是将页面中不经常变更的数据保存在文件中,当有用
户请求访问的时候,直接将数据调出,避免了再次对数据库的请求的I/O 操作,减少了数据库的负载压力。
一般情况下,PHP 的文件缓存分为两种方法:
第一种,把需要缓存的数据进行处理,形成 PHP 可以直接执行的文件。在需要缓存数据的时候,通过 include
方式引入,并使用。
第二种,把需要的数据通过serialize 函数序列化后直接保存到文件。在需要使用缓存数据的时候,通过反序列
化读入文件内容并复制给需要的变量,然后使用。当然,这里说到的serialize 函数是PHP 自带的serialize()函数。针
对该函数的改进问题,后续的章节将会提及。
通过测试发现,第二种也就是serialize 缓存数据的方式更加高效。
分析原因:
include 方式读取缓存的时候,PHP 需要执行几个过程
1.读取文件
2.解析所Include 的文件
3.执行,给变量赋值
而serialize 序列化方式读取缓存的时候:
1.读取数据
2.反序列化数据内容
3.给变量赋值
从以上内容对比的话,可能是由于解析PHP 文件内的数组需要的时间超过unserialize 反序列化数组的时间。
测试代码:
CacheTest_IncludeFile.php
?php
$t1 = gettimeofday();
for ($i = 0; $i 10000; $i++){
include(CacheTest_IncludeData.php);
}
$t2 = gettimeofday();
echo ($t2[sec] - $t1[sec]) * 1000 + ($t2[usec] - $t1[usec]) / 1000 . \n;
CacheTest_IncludeData.php
?php
$testarray = array (
mtime = 0,
values =
array (
0 =
array (
id
文档评论(0)