缓存概述

  缓存从分布来说有两种:

一、客户端缓存

  客户端缓存其实是浏览器的事情,当我们去访问一个新的网站的时候,第一次可能要花一阵子时间才能载入整个页面。然而以后再去时间就会大大缩短,原因就在于客户端缓存。现在浏览器都非常智能,它会在客户机器的硬盘上保留许多静态的文件,比如各种gif,jpeg等等。等以后再去的时候,它会尽量使用本地缓存里的文件,只有服务器端的文件更新了,或是缓存里面的文件过期了,它才会再次从服务器端下载这些东西。很多时候是浏览器替我们做了这件事情。

二、服务器缓存

  有些东西没有办法或者说是不适宜在客户端缓存的,这个时候就必须在服务器端想办法了。服务器端缓存从性质上看,又可以分为两种:

  1、静态文件缓存

  好多页面是静态的,很少改动,那么这种文件最适于作静态缓存。现在的IIS6.0这部分内容是直接存放在Kernel的内存中,有HTTP.SYS直接管理。由于它在Kernel Space,所以它的性能非常的高。用户的请求如果在缓存里面,那么HTTP.SYS直接将内容发送到network driver上去,不需要像以前那样从IIS的User space的内存再复制到Kernel中,然后再发送到TCP/IP stack上。kernel level cache几乎是现在高性能Web server的一个必不可少的特性。这就是为什么静态文件快的原因。

  2、动态缓存

  动态缓存是比较有难度的。因为你在缓存的时候要时刻注意一个问题,那就是缓存的内容是不是已经过时了,因为过时了可能会有很严重的后果。就像是网上买卖股票的网站,给别人的提供的价格是过时的,那人家非得找你拼命。
  在Asp.net中,常见的动态缓存主要有以下几种手段:
  1、传统缓存方式。
  2、页面输出缓存
  3、页面局部缓存
  4、利用.Net提供的System.Web.Cache缓存。
  5、缓存依赖。

  1)、传统缓存

  传统缓存的方式就是利用Application或者Session去保存可重复利用的东西。
  比如:

Session["test1"] = "测试1";
HttpContext.Application["test2"] = "测试2";

  2)、页面输出级缓存

  页面输出缓存是最为简单的缓存机制,仅仅需要配置就可以实现,页面输出缓存指的是程序将输 出的页面内容全部保存在服务器内存中。当用户请求这些页面时,系统直接从内存中输出相关数据,在此 期间,如果缓存没到期,将一直取的都是内存中的数据。在这个过程中,页面是将整个页面的数据内容都保存在内存中。这个东西对于那些页面需要执行大量处理操作才得到结果的页面非常有用。
  在Asp.net WebForm中使用页面缓存非常简单,只需要在页面顶部加一句声明即可。

<%@ OutputCache Duration="60" VaryByParam="none" %> 

  MVC的声明与WebForm类似,只不过是将[OutputCache]设置在Action上而已。

[OutputCache(Duration = 10)]

  至于众多的参数,本处不做解释了,在程序里敲上[OutputCache]再转到定义就能够看到详细。

  3)、控件缓存

  在WebForm中还允许将某一个控件缓存的局部缓存的方法,但是由于在MVC中控件并不能用了,因此本处略过。在这篇文章有MVC Action缓存的方法。
  http://www.cnblogs.com/kissdodog/archive/2013/05/21/3090513.html