在PHP项目的调优中,缓存可能是首先需要考虑的。我认为它其实就是资源的整合与分配,因为我们现在的项目中需要使用更多的数据,运算需求越来越高,就需要我们将已有的资源充分利用。
缓存(cache)的基本意思是:进行高速据交换的存储器。通俗的讲就是先到cache中查找数据,如果有直接取出,没有就需要重新取数据。在网络应用的缓存中:浏览器向应用服务器发出请求,应用服务器经过复杂的逻辑判断和计算向存储发送请求,存储再经过计算把数据返回给应用,应用再次计算再返回给浏览器,这是标准的流程,中间牵涉到大量的计算,关于这种模式可以查看HTTP协议。再现实的业务中,web业务需求复杂并且并发不断的增加,应用服务器和数据库服务器需要做的计算也越来越多,但是我们的应用服务器资源是有限的,数据库接受的请求也是有限的。
针对上面的情况,一个好的办法就是减少计算,减少请求。这个时候,缓存的就体现出它的价值了。缓存的基本原理就是打破标准的流程,在流程的各个环节切断,请求可以从缓存中直接读取数据并直接返回。缓存我们不要把它当作只存放在内存中,缓存是可以存放在内存和硬盘中的。文件缓存我们是存放在硬盘上,而一些需要高速存取的变量则缓存在内存中。
首先,我们看看文件缓存。文件缓存就是把数据存储在文件系统即硬盘中。与内存相比,硬盘数据比较缓慢的存储方式,我们只所以还需要文件缓存,主要有以下原因
1、磁盘够大,可以存放足够多的数据
2、磁盘与内存比数据更不容易丢失
文件缓存的逻辑很清晰,比如最简单的php代码生成静态的HTML文件,就是把动态的PHP代码编译成静态的HTML文件,当下次读取时就不再编译读取文件,据以前开过的数据,访问静态HTML代码的数据是访问动态PHP代码的2-20倍。这种的模式应用很广,比如在网站的类目导航中,三级或多级的应用很多,如果我们做到,直接访问静态页而非动态页,经大大的提高我们的速度;具体的过程我们可以这样做:
1、判断当行是否进行缓存(可以根据更新的时间判断)
2、判断是否有对应的类目导航文件
3、判断文件是否过期
理解PHP运行机制,我们可以知道,一个PHP程序在运行完成后,内存就会马上释放,基本上所有数据都在此刻销毁。这和C#\JAVA等常驻内存的语言有很大的区别。这种缓存的机制它的有点就是避免内存泄露,内存回收机制更简单;缺点很明显,不可复用,需要不断的请求。当然我们可以通过eAccelerator这样的工具使PHP代码可以“常驻内存”,这虽然只是简单的缓存不能和c#java的内存变量相提并论,但这确确实实的提高了php的执行效率,使的PHP接近编译语言的速度。
在Apache和Nginx,他们都各自提供了自己的服务器缓存。它们都各自支持文件缓存和内存缓存,这里就不一一叙述。
在这里我们还需要知道一个工具php-memcache,用来存放缓存数据、数据临时存放的地方,当我们重新启动或关闭服务器时,它就不存在了,它是一个内存级别的缓存工具,是我们php开发必须需要掌握的工具之一。
上面只是讲解的了,缓存的基本概念和为什么要使用缓存,介绍了一些常用的工具,只是理论介绍,希望有所帮助。