ASP.Net缓存总结及分析 分享(5)

通过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”

      也就是说sql缓存暂时只支持ms sql server 2005或以上,他们才有依赖通知。否则缓存无效。

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()方法,则依赖会被忽略。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgjsy.html