作者: xxzqb,  出处:blog, 责任编辑: 王晓晨, 
2008-08-05 08:05
  数据缓存Data Caching)就是将数据暂存于内存缓存区中的一种技术。

  数据缓存(Data Caching)就是将数据暂存于内存缓存区中的一种技术。
  1. 网页输出缓存
  当网页的内容相对固定时,可以将整个网页缓存起来。因为对于动态网页来说,网页的访问大体上可以分为三个步骤:
  用户请求
  动态生成网页并转化为HTML格式
  向浏览器发送显示
  设置网页输出缓存(Output Caching)的方法很简单,下面举例:
  (1) 在网站中增加一个网页,放入一个label控件,假定将控件命名为TimeMsg
  (2) 在网页的Page_Load事件编写如下代码,以便在TimeMsg控件中显示打开网页的时间。
  {TimeMsg . text=”打开网页的时间是:”+DataTime . Now . ToString()}
  (3) *.aspx网页的代码中增加设置缓存的指令:
  语句””是网页配置的指令,在这里用来给网页指定缓存参数。 其中:Duration=”60” (注意:时间两端要加引号)代表缓存持续时间为60秒,VaryByParam属性用来指定特定版本的网页输出。 在配置指令中一定要加入VaryByParam属性。即使不使用这个版本属性,也要将它加入,但将其值设为 none
  网页缓存以后,不论访问的用户来自世界何处,都直接从缓存区中提取出来直接送发显示。
  2. 数据库缓存
  通常情况下,大量数据是保存在数据库中的,而应用程序访问数据库是一项很费时的操作。
  如果先将数据库中的数据缓存到缓存区中,当应用程序需要这些数据时,直接从缓存区中提取,就可以减少系统开销。
  在ASP . NET 2.0中可以通过数据源设置数据表的缓存参数。 SqlDataSoure控件的属性中有几项用于设置缓存的参数。
  ● CacheDuration:代表缓存的持续时间。默认时间为王晓晨 Infinite(无限)。本例中设置为600秒。
  ● CacheExpirationPolicy:缓存策略。包括两种设置:Absolutesliding 。当设置成Absolute时,时限一到,缓存区失效;当设置为sliding时,时限一到立即刷新缓存区中的数据,并继续缓存更新后的数据。
  ● EnableCaching:默认为False,即不使用数据缓存,将该属性改为True,即可启动数据缓存。
  ● SqlCacheDependency:缓存依赖关系。例如设置为pubsauthors 表示数据库pubs中的authors数据表与它的数据缓存之间建立依赖关系。
  属性中作了上述设置后,将自动形成以下代码:
   ID=”SqlDataSource1”
  EnableCaching=”true”
  CacheDuration=”600”
  ConnectionString=”Server=localhost ; database=pubs ;”
  selectCommand=”select title from titles”
  Runat=”Server” />
  有时数据表太大,缓存区可能会占用太大的内存空间。 可以将数据缓存到硬盘的缓存区中,为了实现这一点,需要做一些专门的设置。设置包括两方面。
  一方面,在网页的代码中增加以下配置语句:
  另一方面,在Web . config文件中指定硬盘缓存区的大小,配置语句如下: 
<system . web>
          <caching>
            <outputCache>
                  <diskCache  enabled=”True”  maxSizePerApp=”2” />
            </outputCache>
          </caching>
</system . web>
  前面的语句中关键部分已经用粗体表示。其中,DiskCache enabled=”True”用来启动硬盘缓存功能;maxSizePerApp=”2”用来确定缓存区的容量,这里确定的缓存区最大容量为2兆。 由于对硬盘的存取速度比较慢,因此硬盘缓存只适用于缓存持续时间较长的情况(本例中缓存时间为60分钟)
  3. 缓存池
  数据缓存技术大大提高了数据访问的速度,但却可能引发数据不一致的问题。
  因此,以上数据缓存技术只适用于数据量大,变化频率不高的数据。 现在ASP . NET 2.0新版本结合数据库SQL Server2005,对数据缓存功能又作了很大改进,既简化了使用进程,又完善了处理措施,其中最突出的一点就是与数据库相结合自动解决了数据失效的问题。
  在ASP . NET 2.0中为了解决数据实效的问题,通过新类SQLCacheDependency建立起与新一代数据库的SQL缓存依赖关系,这种关系可以使得数据库能够自动监视数据表的状况,一旦数据表发生了变化,立即启动数据库本身的触发器将相应的缓存区中的数据变为无效。