构建高性能的web站点学习笔记三------动态内容缓存

缓存分为:整页缓存,局部缓存,数据缓存,还有代码解释器缓存,web服务器缓存

缓存和缓冲的区别:二者相似之处都是解决速度不一致,而且都需要一块存储区域,缓冲主要为了减缓压力,比如内存的读写速度远远大于磁盘的读写速度,所以我们设置了磁盘缓冲区,常见的又在线看视频的时候视频缓冲区,但是缓存注重的是策略,需要考虑的是缓存命中率,每次都能找到我们想要的数据那是最理想的结果

缓存的本质:就是将那些需要昂贵开销的计算结果保存起来,下次使用直接读取,而避免重复的计算。

缓存可以存放的位置

1.存放在文件中,这样的话每次读取缓存会涉及到文件IO操作,我们看一下smarty中缓存操作

2.保存到内存中,形式为Key-value的形式,我们不必担心在内存中查找速度的问题,即便是有很多key,查找速度也是非常快的,使用内存缓存方法必须使用php的APC模块,或者使用XCache,下面我们看一下具体实现

apc模块

XCache模块

将文件放到内存中的好处是可以减少IO操作,对于数据库访问密集的服务器,可以让服务器处理更多额数据库IO操作

3.缓存服务器:我们可以将缓存存放到一台独立的缓存服务器中,利用memCached,我们很容易通过TCP将内容存储到缓存服务器中,而且memcached也是通过内存空间保存缓存服务器,减少了不必要的I磁盘IO.另外memcached在内存中给每一个key都维护一个过期时间,过期后自动删除key,这样缓存过期检查非常容易,只需要在缓存数据时制定过期时间即可,下面看一下应用代码

下面我们看一下各缓存方式吞吐率对比图

     你可能会发现apc方式性能最好,主要原因他是将缓存存放在了本地服务器,既然这样,空间上难免有些限制,假设你的网页有数十万个动态网页需要缓存,如果每个100KB,10万个网页就是1GB,那么我们服务器内存空间容量就会成为系统性能的瓶颈,好吧,购买更多的内存,这有设计到经济问题,一旦本地服务器内存扩展到极限,怎么办,这又是一个技术问题,我们不得不想其他办法去扩展内存,显然memcached分布式缓存使扩展成为了可能。还有一个小原因,我们每个缓存因为我们本次测试是访问的同一个动态页面,而且都在其生存期内,故命中率100%,如果网站页面较多 ,内存无法缓存所有页面那么命中率就会减小,同样吞吐率也会随之减小。

就吞吐率而言,memcached可能没有本地内存缓存速度快,web服务器的内存本身都很宝贵的,他要处理HTTP进程,和脚本解释器开销。但是出于上述多方面考虑,你会觉得他是值得,总之一句话扩展性好

综合考虑:如果你的站点初创,需要缓存的页面较少,而且服务器的内存有足够的空间,APC不失为一个很好的选择,随着站点的增大我们可以更换缓存机制,看一下刚才的代码,其实是很方便的。我们不能预测未来,但要做好充分的准备

你可能感兴趣的:(Web,服务器,memcached,扩展,web服务,缓存服务器)