如何实现asp.net 2.0的SqlCacheDependency

以前使用Cache的时候,总是当心Cache中数据版本和数据库中数据版本不一致,虽然通过触发器+文件IO实现的文件缓存依赖也可以实现缓存数据的及时更新,但是每个应用产生一个IO文件,不怎么经济,另外触发器性能也不是很高,所以经常在添加删除修改的时候,删除缓存键值来实现,但可能还有遗漏的地方。asp.net 2.0中实现了SqlCacheDependency,本文描述如何在asp.net 2.0实现SqlCacheDependency:
首先,在web.config system.web节点文件里面加上如下代码: 

   <caching>
    
<sqlCacheDependency enabled="true">
     
<databases>
      
<add name="AtlasDemoDb" connectionStringName="AtlasDemoDbConnectionString" pollTime="12000"></add>
     
</databases>
    
</sqlCacheDependency>
   
</caching>


这样即配置了一个缓存依赖的数据库,在页面中的ObjectDataSource对象的EnableCaching设置为true.,然后设置SqlCacheDependency属性为AtlasDemoDb:SimpleDemo1,AtlasDemoDb为web.config配置的缓存数据库名称,SimpleDemo1为该数据库下的一个表名。
光是这样,系统还会出现如下问题:

没有为 SQL 缓存通知启用数据库“AtlasDemoDb”。

要为 SQL 缓存通知启用数据库,请使用 System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications 方法,或命令行工具 aspnet_regsql。要使用此工具,请运行“aspnet_regsql.exe -?”以了解详细信息。

按照上面所说,运行aspnet_regsql.exe 比较烦,可以在Page_Load事件中填写

System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(System.Configuration.ConfigurationManager.ConnectionStrings["AtlasDemoDbConnectionString"].ConnectionString, "SimpleDemo1");

这样就可以使用SqlCacheDependency了。明天测试一下该方法的性能。今天太困了,先睡了
作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-08-15 23:08 Robin Zhang 阅读(2552) 评论(8) 编辑 收藏

 回复 引用 查看   
#1楼 2006-08-16 08:05 aspnetx      
既然是发布到首页的就多说一点嘛
 回复 引用 查看   
#2楼[楼主] 2006-08-16 08:18 jillzhang      
@aspnetx
发现你精力比较充沛,很早。
谢谢你的支持。现在没有时间,晚上回家测试一下该方法的性能如何 。

 回复 引用   
#3楼 2006-08-16 09:04 leeairw
哈哈。我精力也充沛,我也想多看看,晚上一定要补全。
 回复 引用 查看   
#4楼 2006-08-16 09:16 風語者·疾風      
关注,我们项目组也使用了SqlCacheDependency,但现在的情况是发现这玩意儿相当的不稳定,在不少开发机器上会出现刚把内容Insert到缓存,马上就触发倚赖改变导致缓存释放。
 回复 引用   
#5楼 2007-04-19 08:25 .net[未注册用户]
zczc
 回复 引用 查看   
#6楼 2009-07-09 14:21 WangKai      
我的页面有四个GridView,分别绑定的是数据库四张表,使用SqlCacheDependency可以在一张页面中缓存数据库多张表的数据吗?

 回复 引用 查看   
#7楼 2009-09-18 10:14 jsean      
@WangKai
可以,用AggregateCacheDependency类