缓存技术

Output Caching
   当一个网页频繁被访问的时候,我们可以通过把"整个网页"缓存来提高执行效率。这样作的优点是,当用户(包括其它用户)再次访问这个网页的时候,被格式化好的HTML会被直接送显。
   由于IIS的一些特性,默认情况下Output Cache是打开的(IIS会根据网站的总访问量估数出需要缓存多少数据,怎么缓存,缓存时间有多少),但是要对某些请求进行缓存,还需要开发者进行定制(编程实现)。
   一旦Output Caching被定制过,那么这个网页就会在第一次被访问的时候生成cache,直到请求过期为止。
   --拖放一个Label,文本设为当前时间。页面里加入<%@ OutputCache Duration="60" VaryByParam="none" %>
   --这段话定义了页面将要被缓存,其缓存时间为60秒,并且不会因为request接受的参数而改变缓存的内容(VaryByParam="none"),只有在60秒后,页面自动清除出缓存,此时第一个访问提供了新的缓存。 
   
由参数改变缓存内容
   有些时候我们需要根据用户的请求来生成页面,但是用户的请求只有有限的几种组合,这个时候就可以根据用户请求来生成几种缓存页面,来进行缓存(如在查询一组客户时,根据地区的划分,只有有限的几个地区,我们可以把这几个有限的请求都缓存起来)。
   aspx:
   <%@ OutputCache Duration="60" VaryByParam="state" %> //页面会根据请求的state进行缓存
   <%= DateTime.Now.ToString() %>
    <a href="Default2.aspx?state=1">1</a>
    <a href="Default2.aspx?state=2">2</a>
    //运行后重复点击链接时间不改变  
  
硬盘缓存:
  如果需要缓存的数据量比较大而且不需要经常改变或不需要实时刷新时,可以使用硬盘缓存(内存毕竟有限)。
  在<@ OutputCache中加入DiskCacheable="true",这时Duration时间相对要长一些(IO读取速度和占用资源的原因)。
  可以在Web.Config中配置缓存文件的大小。
  <caching>
   <outputCache>
    <diskCache enabled="true" maxSizePerApp="2" />  //2M。正式版取消了这个特性
   </outputCache>
  </caching>
     
回调缓存
  通过设置回调缓存机制,可以针对每个请求在页面中插入动态的部分,以弥补单独使用静态缓存的不足。它的特点是可以在静态页面中插入经常改变的一小部分。
  --如在一个网页中80%内容(新闻、图片等实时性不是很强的肉容)希望被缓存起来,但有20%的内容(如当前的星座运势和吉祥数字)希望每个用户访问时都重新执行这20%的代码,然后重新生成结果送显给用户,每次访问网站都看到不同的内容。
  --可以通过<asp:SubStitution...来实现回调缓存。
 
Page Fragment Caching:
  作为Output的缓存的附加功能,还提供一种缓存技术,专门用于缓存用户控件。
  在页面中,通过指定返回参数,来决定控件被缓存的部分。使用语句VaryByParam语句指定控件根据参数来改变。
  --象上面回调缓存中的例子一样,Page Fragment Caching可以指定页面中某个控件或某个区域的内容是不被缓存的,并且Page Fragmen t Caching使用比回调缓存简单。
  --自定义用户控件,在自定义控件页面中加入 <%@ OutputCache Duration="60" VaryByParam="none" %>。然后将控件拖入不被缓存的 页面中,这样当页面被访问时,只有控件部分的信息被缓存,其它区域皆不被缓存。

 数据缓存:
  asp.net提供了一种非常快捷的方法进行数据库缓存,用户可以非常方便的对页面变量时进行缓存。并以此提高程序效率。
  一个页面变量的缓存生命周期与应用程序的缓存生命周期相同。
  同时在对后台数据进行修改的时候,还需要对cache进宪相应的处理。
  --把数据库文件读到XML或DataSet对象里,通过对它们的缓存(考虑用硬盘缓存)来提高对数据库访问的效率。
  --Source = Cache("MyDataSet"); 
  --if(Source Is Nothing Then 
   {
    //重新读取数据库
    Source = new DataView(ds.tables("Authors"));
    Cache("MyDataSet") = Source;
   }
  --MyGrid.DataSource = Source; 
  
SQL Caching
  前面的例子中,缓存一旦时间到,无论服务器端的数据是否被改变,都会释放缓存。
  下面我们通过配置数据库连接池,只有当数据库数据被改变的时候,缓存才会改变。 
  --在cmd.exe中找到aspnet_regsql.exe工具,配置以下命令:
   A。完成数据库级基础构造的添加:
   aspnet_regsql.exe -S 数据库服务器名 -U 用户名 -P 密码 -d 数据库名 -ed  //SQL验证方式
   aspnet_regsql.exe -S 数据库服务器名 -E -d 数据库名 -ed  //Windows验证方式
   B。指定表名:
   aspnet_regsql.exe -S 数据库服务器名 -U 用户名 -P 密码 -d 数据库名 -t 表名 -et  //SQL验证方式
   aspnet_regsql.exe -S 数据库服务器名 -E -d 数据库名 -t 表名 -et   //Windows验证方式
   在页面中注册:<%@ OutputCache Duration="999999" SqlDependency="数据库名.表名" VaryByParam="none" %>
  --注意连接池只能监视有限的几个库,一般只注册一到两个库比较合适,避免连接池负载过大。
 
读取web.config中的缓存配置
  通过在web.config中定义好缓存的参数,在页面中只需指定使用哪个缓存的配置即可,避免了重复的定义。
  web.config:<caching><outputCacheSettins><outputCacheProfiles><add name="CacheFor60s" duration="60"/>...
  aspx:<%@ OutputCache CacheProfile="CacheFor60s" VaryByParam="none" %>

转载自:http://www.cnblogs.com/vipcjob/archive/2009/08/05/1539487.html

posted @ 2010-05-28 12:40  itor  阅读(218)  评论(0编辑  收藏  举报