网站的缓存机制的选择和应用(转)

很多人都在问,想某某网站这样高访问量的网站,非生成静态页面,能承受这么大的访问量吗?他是怎么做到的?!其实在这里面,缓存扮演着很重要的角色。
  为什么需要缓存?缓存的性能??
  缓存的最根本的目的是为了提高网站性能,减轻频繁访问数据而給数据库带来的压力。再进一步,合理的缓存了某种数据形式,还会减轻程序运算时,对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个钟头,他的访问量很低,那么就应该把这个页面缓存释放了。
  好了。关于网站的缓存机制,说到这里也差不多了,更多的经验还要各位好好积累,缓存没有一个标准,只有看是否能合适这个网站系统的需求。而且需要在网站的运营中不断的调整,以满足更高的需求。

猜你喜欢

转载自mfkzhou.iteye.com/blog/1954077