南京北大青鸟
北大青鸟中博大学生专区 南京北大青鸟高中生专区 北大青鸟南京中专生专区 南京中博待业者专区 北大青鸟在职者专区
 
在线咨询
 
 
 
中心简介
校区简介
校区环境
周边景点
关于北大青鸟
特色优势
常见问题解答
网站地图
 
 
ACCP软件工程师课程
什么是ACCP
ACCP6.0课程介绍
各课程定位与介绍
各阶段课程
教学模式
ACCP6.0课程体系
ACCP6.0认证证书
 
 
  开班信息  
 
 
讲座试听
 
您的位置:首页 - 编程技巧 - 阅读信息
asp.net 2.0 缓存总结(三)
作者:南京中博-管伟  出处:  日期:2011-03-25
几乎可以给缓存添加任何对象,例如,可以添加自定义控件,DataSet,DataTable,ArrayList和List到缓存。注意:使用从缓存中返回的任何项目,应该总是要检查项目是否为空,如果一个项目已经被删除了,则当将来试图从缓存中读取时,就会返回null

 

    

     Cache对象

  几乎可以给缓存添加任何对象,例如,可以添加自定义控件,DataSet,DataTable,ArrayList和List到缓存。注意:使用从缓存中返回的任何项目,应该总是要检查项目是否为空,如果一个项目已经被删除了,则当将来试图从缓存中读取时,就会返回null。

  详细信息查看msdnCache 成员

  添加数据缓存到Cache对象示例代码:


 void Page_Load()
  {
  DataTable dt=(DataTable)Cache["dtkey"];
  if(dt==null)
  {
  dt=getdtFromDB(); //此处调用方法从数据库中返回数据项DataTable
  Cache.Insert("dtKey",dt,null,DateTime.Now.AddHours(1),Cache.NoSlidingExpiration); //此处使用绝对过期策略添加项目
  }
  GridView1.DataSource=dt;
  GridView1.DataBind();
  }
  private DataTable getdtFromDB()
  {
  //略......
  }

  使用依赖添加项目

    asp.net包括三种缓存依赖

  1、CacheDependency——用于创建一个文件依赖或缓存键值依赖。

  2、SqlCacheDependency——用于创建一个对于sql server数据库表或SQL Server 2005数据库查询的依赖。

  3、AggregateCacheDependency——用于使用多个CacheDependency对象创建依赖,例如,可以用该对象组合文件和Sql依赖。

  CacheDependency类是基类,其他两个类都是从该类继承。

  指定缓存项目优先级

  可以指定CacheItemPriority枚举类型任意值。

  配置缓存

  详细信息查看Msdn Caching元素

  5.使用SQL缓存依赖

  asp.net 支持两种类型的SQL缓存依赖:拉和推。第一种模式使用表轮询的 ASP.NET 实现,第二种模式使用 SQL Server 2005 的查询通知功能。可以对任何最近版本的Ms SQL Server,包括Ms SQL server 2005 Express、Ms SQL Server 2000 和 Ms SQL Server 7.0,使用拉SQL缓存依赖。第二种类型推缓存依赖则只能用于Ms SQL Server 2005和Ms SQL server 2005 Express,因为他们依赖SQL Server的Service Broker。

  使用拉SQL缓存依赖

  实质上拉SQL缓存依赖使用数据库tigger,当表被修改时,tigger被触发,名为AspNet_SqlCacheTablesForChangeNotification的数据表的一行数据被更新,来记录修改情况,Asp.net Framework使用一个后台线程,来定期拉数据表的修改信息。如果有修改,则依赖于数据表的缓存项目被移除。

  配置拉SQL缓存依赖:

  1、必须对一个或多个数据库表启用SQL缓存依赖。

  可以使用框架中的SqlCacheDependencyAdmin类来配置SQL数据库支持拉SQL缓存依赖,由于调用该类的方法需要创建表、存储过程、trigger,出于安全考虑,Asp.net进程并不应该被赋予这些权限,而是通过一个命令行工具来使用此类。

  aspnet_regsql 详细信息访问Msdn ASP.NET SQL Server 注册工具 (Aspnet_regsql.exe)

  简要步骤: 1、启用特定数据库的SQL缓存依赖。

  aspnet_regsql -c “server=localhost;integrated Security=True;database=Pubs" -ed

  2、启用特定表的SQL缓存依赖。

  aspnet_regsql -c "Data Source=localhost;integrated Security=True;Initial Catalog=Pubs" -ed -t Titles

  2、必须在Web配置文件中配置SQL缓存依赖。

  

<!-- caching section group -->
                <caching>
                <sqlCacheDependency enabled = "true" pollTime = "1000" >   //通过pollTime 的设置,定时拉数据库的修改
                    <databases>
                      <add name="Northwind"
                         connectionStringName="NorthwindConnectionString1"
                       pollTime = "1000"
                      />
                    </databases>
                </sqlCacheDependency>
                </caching>

  a、 对页面输出缓存使用拉SQL缓存依赖:指令指定sqlDependency属性值:库名和表名(Mydatabase:Mytable);

  b、对DataSource控件使用拉SQL缓存依赖:为DataSource控件sqlDependency属性指定值:库名和表名(Mydatabase:Mytable);

  c、对Cache对象使用拉SQL缓存依赖:


     void Page_Load()
  {
  DataTable dt=(DataTable)Cache["dtkey"];
  if(dt==null)
  {
  dt=getdtFromDB(); //此处调用方法从数据库中返回数据项DataTable
  SqlCacheDependency sqlDepend=new SqlCacheDependecy("Mydatabase","Mytable");
  Cache.Insert("dtKey",dt,sqlDepend);
  }
  GridView1.DataSource=dt;
  GridView1.DataBind();
  }
  private DataTable getdtFromDB()
  {
  //略......
  }

  使用推SQL缓存依赖

  通过Service Broker可以在数据库中的数据变更时自动给应用程序发送一个消息。

  好处:Asp.net应用程序不必定时拉数据库的修改。

  缺点:查询类型有诸多限制(如必须使用两部分的表明:abo.mytabel,查询必须包含一个显示的列名表明:不能使用*,不能引用视图、临时表等,不能包含子查询、外连接、子连接,不能引用大对象、不能使用DISTINCT、COMPUTE、COMPUTE BY、INSERT关键字、不能包含许多聚合函数 等等)

  1.为推SQL缓存依赖配置数据库

  启用Ms SQL Server 2005 Service Broker:

  a、可以通过:Select name ,is_broker_enabled from sys_databases,查询是否对特定的数据库激活。

  b、通过:Alter database MyBase set ENABLE_BROKER,启用。

  c、为本地AspNet帐号赋予需要的权限,如:Grant Subscribe Query Notifications To “yourserver\Aspnet”

  2.为推SQL缓存依赖配置应用程序


 void Application_Start(object sender, EventArgs e)
  {
    string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString;
  SqlDependency.Start(conString);
  HttpContext context=HttpContext.Current;
  context.Cache.Insert(
  "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null
  );
  }

  a、对页面输出缓存使用推SQL缓存依赖:

  当缓存整个Asp.net页面时,可以使用推Sql缓存依赖。如果包含在页面上的任何Sql命令的结果有变动,页面就会自动从缓存中过期。

  SqlCommand对象包含一个NotificationAutoEnlist属性,该属性默认值为true。当NotificationAutoEnlist启用时,页面和命令间自动创建一个推缓存依赖。注意SqlDataSource的SelectCommand必须符合查询要求。

  b、对DataSource控件使用推SQL缓存依赖:

  只需要设置SqlcacheDependency属性即可。设置SqlCacheDependency=“CommandNotification”

  c、对Cache对象使用推SQL缓存依赖:

 


 void Page_Load()
  {
  DataTable dt=(DataTable)Cache["dtkey"];
  if(dt==null)
  {
  string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString;
  SqlDatadapter dad=new SqlDataAdapter("Select a,b From dbo.Mytable",conString); //注意查询符合要求
  SqlCacheDependency sqlDepend=new SqlCacheDependecy(dad.SelectCommand);
  dt=new DataTable();
  dad.Fill(dt);
  Cache.Insert("dtKey",dt,sqlDepend);
  }
  GridView1.DataSource=dt;
  GridView1.DataBind();
  }

  注意,SqlCacheDependency类的示例被创建了。一个SqlCommand对象被传递给SqlCacheDependency类的构造函数。如果SqlCommand的结果变化了,则这个DataTable会自动从缓存中失效。这些命令的顺序很重要。必须在执行该命令之前创建SqlCacheDependency对象。如果在创建SqlCacheDependency对象之前调用Fill()方法,则依赖会被忽略。

  至此,有关缓存的总结,已经结束,本章只包含了一些知识要点,具体应用还要是情况对待。

北大青鸟-中博http://www.njaccp.com

返 回
下一篇:asp.net 2.0 缓存总结(二)
相关新闻
面试时如何总结自身不足
企业2.0的五大误解:风险远大于回报
Foursquare创始人称即将发布Foursquare 2.0
北大青鸟:南京中博 学习要善于总结
王泽锴学习总结
 
中博教育客服在线
 
©南京北大青鸟 隐私政策


学费咨询
学历咨询
专业咨询
订座试听
就业咨询
课程咨询
测试认证
软件认证