很多人都在问,想某某网站这样高访问量的网站,非生成静态页面,能承受这么大的访问量吗?他是怎么做到的?!其实在这里面,缓存扮演着很重要的角色. 为什么需要缓存?缓存的性能?? 缓存的最根本的目的是为了提高网站性能,减轻频繁访问数据而給数据库带来的压力.再进一步,合理的缓存了某种数据形式,还会减轻程序运算时,对CPU带来的压力.首先,我们要知道一个最基本的效率规则,操作内存中的数据比操作存放在硬盘上的数据是要快N个数量级的.操作简单的文本结构的数据比操作数据库中的数据快N个数量级. 例如:每次用户访问网站,都必须从数据库读取网站的标题,每读一次需要15毫秒的时间,如果有100个用户(先不考虑同一时间访问),每小时访问10次,那么就需要读取数据库1000次,需要时间15000毫秒.看看,这个对数据库的压力是很恐怖的.这个时候,就需要用缓存来解决这个问题. 目前缓存的做法分为两种模式: 第一种模式是内存缓存,缓存数据存放在服务器的内存空间中,这种模式的效率是最高的.这里要注意的是:每一个服务器的资源都是有限的,盲目的把所有数据都加在到内存中,将可能会导致服务器资源占用过多,而造成Web服务失败. 第二种模式就是文件缓存,缓存数据存放在服务器的硬盘空间中.存放格式有很多种类,如:文本格式,XML格式,二进制格式等等.这里要注意的是,服务器I/O的处理能力有限,当一次性读取过大数据时(>1M),它并没有想象中那么的高效.这个时候就需要你有一个合理的文件结构来解决了.但这已经不在我们本次要讲叙的内容范围内了. 缓存的数据形式: 知道了缓存的模式,那么应该把怎样的数据形式进行缓存,也是很重要的.缓存合适的数据形式,一方面减轻了数据库的压力,另一方面,也可以让CPU少跑几圈.至于应该缓存什么数据形式合适,这个还是要看你的实际应用场合来决定了.需要从多方面去考虑了,例如整个网站中被调用的次数,调用数据页面被访问的次数,CPU执行某个操作的效率等等 例如:产品分类数据,是应该缓存从数据库读取出来的数组呢,还是缓存从数据库读取之后由程序生成之后的目录树的HTML数据呢?这个时候,你就要看回你网站显示目录树的地方时候足够多,如果超过5地方,而且这5个地方都是在经常被访问到的页面(如首页,产品列表页等),那么缓存生成后的HTML数据,就比缓存产品分类的纯数组显得合适了.如果显示的地方只有1到2个,而其他地方需要显示产品分类,且显示形式不止一种,再且用户也很少会浏览到那些页面,那么不缓存生成后的HTMl数据,直接缓存产品分类数组,就会比较合适了. 缓存的数据内容: 用什么缓存模式缓存什么数据是需要給自己网站制定出一套机制,让程序按照访问负荷自由的去选择的.这样才能最大的利用缓存来提高网站的性能,达到较高的负荷能力.这个我们分两种情况来叙述,第一种是公用的数据,被N多个页面调用.第二种是个体的数据,只被一个页面所调用. 第一种、公用的数据: 公用的数据,一般是页面的标题,头部,广告代码等等.. 对于这种数据,我们一般都是将他放在内存中缓存.原因很简单,因为他被调用的频度非常高,放在内存中减轻了对服务器I/O的负荷. 第二种、个体的数据 个体的数据,一般是整个页面的HTML数据.例如缓存整个首页,整个内容页等等.. 对于这种数据,需要看整个个体页面被访问的次数..例如,有1000个人/秒访问,那么应该考虑把它缓存到内存中,如果有500个人访问,那么应该考虑把它缓存成文件中.小于200个人访问的时候,不缓存. 那么,这里你就需要为每个页面建立一个访问计数了,当达到某个量级的时候,启用某种缓存模式.而至于整个量级这么定义,就要按照服务器本身的性能,网站程序的执行效率来自行规划了. 缓存数据的时长 好了,现在已经把合适的数据进行缓存了,但是我们缓存的数据不是一成不变的,它会随着访问者的操作而不断的更新变化.我们需要设定一个时间来告诉我们的网站程序,缓存已经过期了,需要对新的数据进行缓存.下面,我们对上面说阐述的两种不同的数据进行说明: 第一种、公用的数据 公用的数据,一般这种数据的更新不会很频繁,例如网站标题这些都是几百年不改一下的..那么这些缓存的更新事件,可以在用户更新该数据的时候,才更新,缓存的有效时间是永久的.再如,缓存了会员的积分排名榜单,那么你可以隔5-10分钟更新,如果访问量太高,数据量多,那么还可以更加长(1-2个小时)不等. 第二种、个体的数据 个体数据的页面,就要看情况了,如果是首页,可能一天只是更换一次,那么他的缓存有效是24小时.再如:一个新闻内容页,可能他头2个小时内的访问量很大,那么他被前面的缓存规则缓存放到了内存中...可是后面2个钟头,他的访问量很低,那么就应该把这个页面缓存释放了. 好了.关于网站的缓存机制,说到这里也差不多了,更多的经验还要各位好好积累,缓存没有一个标准,只有看是否能合适这个网站系统的需求.而且需要在网站的运营中不断的调整,以满足更高的需求. 以上所叙为本人的经验,其中难免有些不对的地方,还请各位前辈多多指教了 (责任编辑:admin) |