缓存技术及在Rainbow Portal的应用

2008-02-23 05:40:03来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  1. ASP.NET缓存技术概述

  将数据库中的数据缓存到内存(也能够存储在其他场所),则无需在请求每个页面时都访问数据库。由于从内存中返回数据的速度始终比新提供的数据速度快,因而能够大大提高应用程式的性能。

  ASP.NET为您使用缓存技术提供最大的灵活性,您能够缓存整个HTML页面,或是部分HTML页面,或是各种对象。您能够配置过期策略,或是配置依赖性,即在其他资源如文档或数据库表改变时,自动移出缓存。

  ASP.NET中有两种基本的缓存:

  输出缓存

  页面输出缓存是最为简单的缓存机制,该机制将整个ASP.NET页面内容保存在服务器内存中。当用户请求该页面时,系统从内存中输出相关数据,直到缓存数据过期。在这个过程中,缓存内容直接发送给用户,而不必再次经过页面处理生命周期。通常情况下,页面输出缓存对于那些包含无需经常修改内容的,但需要大量处理才能编译完成的页面特别有用。需要注意的是,页面输出缓存是将页面全部内容都保存在内存中,并用于完成客户端请求。

  能够通过在Web.config进行配置,配置缓存策略,在一组ASP.NET页面中使用。还能够通过HttpCachePolicy类编程性配置页面缓存。

  数据缓存

  应用程式数据缓存提供了一种编程方式,可通过键/值对将任意数据存储在内存中。使用应用程式缓存和使用应用程式状态类似。但是,和应用程式状态不同的是,应用程式数据缓存中的数据是易失的,即数据并不是在整个应用程式生命周期中都存储在内存中。应用程式数据缓存的长处是由ASP.NET管理缓存,他会在项过期、无效,或内存不足时移除缓存中的项,还能够配置应用程式缓存,以便在移除项时通知应用程式。

  同时更有两种特别的缓存,基于以上的缓存模型:

  部分缓存

  部分缓存本质上是输出缓存。顾名思义,页面部分缓存是将页面部分内容保存在内存中以便响应用户请求,而页面其他部分内容则为动态内容。页面部分缓存的实现包括两种方式:控件缓存和替换后缓存。前者也可称为片段缓存,这种方式允许将需要缓存的信息包含在一个用户控件内,然后,将该用户控件标记为可缓存的,以此来缓存页面输出的部分内容。这一方式缓存了页面中的特定内容,而没有缓存整个页面,因此,每次都需重新创建整个页。例如,假如要创建一个显示大量动态内容(如股票信息)的页,其中有些部分为静态内容(如每周总结),这时能够将静态部分放在用户控件中,并允许缓存这些内容。缓存后替换和控件缓存正好相反。这种方式缓存整个页,但页中的各段都是动态的。例如,假如要创建一个在规定时间段内为静态的页,则能够将整个页配置为进行缓存。假如向页添加一个显示用户名的Label控件,则对于每次页刷新和每个用户而言,Label的内容都将保持不变,始终显示缓存该页之前请求该页的用户的姓名。使用缓存后替换机制,能够将页配置为进行缓存,将页的个别部分标记为不可缓存。在此情况下,能够向不可缓存部分添加Label控件,这样将为每个用户和每次页请求动态创建这些控件。

  数据源缓存

  数据源缓存是指在数据源控件如SqlDataSource, ObjectDataSource, and XMLDataSource中缓存数据,实际上是数据缓存,只但是缓存由控件内部实现。

  缓存依赖

  缓存依赖允许缓存项依赖于另外一个资源,这样资源变化时,缓存项自动移出。

  ASP.NET包括3种依赖类型

  依赖于其他缓存项

  依赖于文档或文档夹

  依赖于数据库查询。

  另外您还能够使用聚合依赖,或是自定义缓存依赖。

  缓存功能也有其自身的不足。例如,显示的内容可能不是最新、最准确的,为此,必须配置合适的缓存策略。缓存增加了系统的复杂性并使其难于测试和调试,您配置的断点、监控变量等由于缓存在调试时都可能无效。

  2. Rainbow Portal中的数据缓存

  Rainbow Portal的Portal、页面、模块的配置信息、页面布局、主题等信息全部保存到数据库里,若是每次从数据据库读取,就会影响性能。Rainbow自此处理上使用了数据缓存技术。

  两个辅助类:

  Rainbow.Framework.Settings.Cache.Key 实现缓存键名的获取,其方法都是静态的。由于Rainbow一个网站能够包含多个Portal,每个Portal都有单独的配置,因此缓存的键名要区分不同的Portal。Key类为键名每个加上Portal的别名作为前缀。

  如获取Portal配置信息的键名:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: XML WebService完全实例周详解析

下一篇: 网友原创:从N层到.NET周详剖析原理

以下是引用片段:
  public static string PortalSettings()
  {
  return string.Concat(Portal.UniqueID, "_PortalSettings");
  }
  Rainbow.Framework.Settings.Cache.CurrentCache类封装对当前缓存的操作。
  Rainbow.Framework.Site.Configuration命名空间中的PortalSettings类,PageSettings类,ModuleSettings类;Rainbow.Framework.Design命名空间中的LayoutManager类,ThemeManager类等,都应用了缓存技术。一般过程为:先判断当前的Cache里有没有缓存值,若有则从缓存中直接读取,若没有就从数据库中读取,然后保存到当前缓存中。
  以PortalSettings类为例说明:
  public class PortalSettings
  {
  ......
  public static Hashtable GetPortalBaseSettings(string PortalPath)
  {
  Hashtable _baseSettings;
  if (!CurrentCache.Exists(Key.PortalBaseSettings()))
  {
  //从数据库里读取
  ......
  保存到缓存中
  CacheDependency settingDependencies =
  new CacheDependency(
  new string[]
  {
  LayoutManager.Path,
  layoutManager.PortalLayoutPath,
  ThemeManager.Path,
  themeManager.PortalThemePath
  });
  using (settingDependencies)
  {
  CurrentCache.Insert(Key.PortalBaseSettings(), _baseSettings, settingDependencies);
  }
  }
  else
  {
  _baseSettings = (Hashtable)CurrentCache.Get(Key.PortalBaseSettings());
  }
  return _baseSettings;
  }
  }