打印本文 打印本文 关闭窗口 关闭窗口
ASP.NET 数据库缓存依赖
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1726  更新时间:2009/4/23 10:49:50  文章录入:mintao  责任编辑:mintao
ter.Fill(ds,"Employees");

                     CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RefreshCache);

 

                     string depFile= ConfigurationSettings.AppSettings["dependencyFile"].ToString();

                     HttpContext.Current.Cache.Insert("Employees",ds,new CacheDependency(depFile),

                                   Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,

                                   CacheItemPriority.High,onRemove);

 

                     blnReflash = true;

              }            

       }

 

就像上面看到的一样,我们定义了一个Cache类型的_cache对象,在Application_Start方法中,我们把当前的Cache实例赋给它,然后调用RefreshCache方法去填充该对象。RefreshCache实际上是一个静态的委托回调方法,它所做的就是简单的从Empoyees表中取得一个DataSet,然后创建CacheItemRemovedCallback类型的委托OnRemove,使其指向RefreshCache方法,这样当被监控的文件变化时,也就是缓存失效时,就会调用该委托,刷新缓存中的数据。

       最后我们把DataSet连同OnRemove委托一起插入到缓存中,在Session_Start中,为了“保险“,我另外添加了一个判断来调用RefreshCache方法填充缓存。

       到这里,我们应用程序就创建好了,在任何页面中都可以访问到缓存的DataSet。在WebForm1aspx中,我演示了如何使用它。

[C#]

private void Page_Load(object sender, System.EventArgs e)

{

//保证缓存非空,如果为空,则填充它

       if(Cache["Employees"] == null)

              Global.RefreshCache(null,null, 0);

              cacheStatus.Text = "Cache Refreshed at "+ DateTime.Now.ToLongTimeString();

       else

              cacheStatus.Text = " DataSet from Cache ";

                    

       DataSet ds = (DataSet)Cache["Employees"];

       DataGrid1.DataSource= ds.Tables[0];

       DataGrid1.DataBind();

}

 

   现在,如果你请求这个页面,它将会每次成功的显示从从Cache中取得的DataSet,如果你保持浏览器打开,同时打开SQL Server的查询分析器,选择Northwind数据库,执行SQL语句''''Update Employees set Lastname = ''''Davovlieu'''' where EmployeeID =1'''',更新表中的记录,然后重新请求该页面,你将会看到缓存已经失效并刷新。

译者按:关于基于数据库的缓存依赖,gotdotnet上也有一个用DataSet实现的(Rob Howard 实现) ASP.NET Cache Invalidation on Database Change

目前在ASP.NET1.1版本没有非常自然的解决方案,值得欣慰的是,随Whidbey一起发布的ASP.NET2.0,还有Yuku,从数据层提供了一个不错的实现。让我们拭目以待!
 

下面的工程是Visual Studio.NET 2003格式。

下载本文工程 

 

 

 

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口