分享
 
 
 

如何在asp.net2.0下面使用基于数据库(sqlserver2000)的cache

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

在.NET1.1下面Cache只能基于文件系统、对象等做Cache的依赖项,但是在.NET 2.0提供了一个新的依赖项SqlCacheDependency,这个项使我们Cache依赖数据库的变化来改变。虽然这做法看起来和1.1里面的变通做法相似,但是它们之间还是有本质的区别(SqlCacheDependency对象的提供)。(1.1的变通做法是为数据表创建触发器,然后该触发器在触发的时候会修改一个本地文件,系统中的某一个Cache的依赖项就是这个本地的文件,这样来通知Cache所缓存的数据变化了)

.NET 2.0的SqlCacheDependency可以在SqlServer2000以后的版本使用,本文介绍在Sql Server 2000下的使用方法,Sql Server 2005的稍有不同。

首先需要安装.NET 2.0的框架,当然Sql Server 2000一定要有了。在.NET 2.0里微软提供了一个实用工具:aspnet_regsql(和aspnet_regiis在同一个目录下面),这是一个命令行工具,该命令行参数可以通过aspnet_regsql -?获得。这里我们关心下面几个参数:-ed为SQL缓存依赖项启动数据库,-E使用当前的windows凭据进行身份验证,-d用于应用服务器的数据库名称,如果未指定任何数据库名称,则使用默认数据库“aspnetdb”。本文中将使用微软的示例数据库pubs。那么我们就要使用下面的命令行来创建缓存依赖数据库:

aspnet_regsql -ed -E -d pubs

(注意:这里的命令行参数是去分大小写的)

当执行完这个命令后,我们可以打开pubs数据库看看发生了什么变化,首先多了一个表:AspNet_SqlCacheTablesForChangeNotification,这个表里面有3个字段,tableName:监视的表名称,notificationCreated:创建时间。changeId:变化编号(累加字段)。还可以看到该数据库多了几个存储过程,他们分别是:

AspNet_SqlCacheRegisterTableStoredProcedure,

AspNet_SqlCacheUnRegisterTableStoredProcedure,

AspNet_SqlCacheUpdateChangeIdStoredProcedure,

AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,

AspNet_SqlCachePollingStoredProcedure

从字面上这几个存储过程都很好理解,该存储过程的详细内容可以在查询分析器里面打开后查看。为了可以监视一个表的变化,我们需要通过执行AspNet_SqlCacheRegisterTableStoredProcedure存储过程来指定一个需要监视的表,当然也可以通过实用工具aspnet_regsql来指定,命令行如下:

aspnet_regsql -et -E -d pubs -t authors

通过执行上面的命令以后,aspnet_regsql会为authors创建一个触发器,下面是我执行该命令后创建的触发器:

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO

ALTER TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] ON [authors]

FOR INSERT, UPDATE, DELETE AS BEGIN

SET NOCOUNT ON

EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'authors'

END

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

从触发器可以看出,当对authors表插入,删除以及更新的时候都会执行存储过程AspNet_SqlCacheUpdateChangeIdStoredProcedure,该存储过程会向AspNet_SqlCacheTablesForChangeNotification表里面添加一条记录。记录如下:

tableName notificationCreated changeId

authors 2006-06-20 09:38:26.267 1

当你对authors里面的数据做任何修改changeId都会累加,其他字段不变化。

接着要在web.config里面添加一些内容就可以使用了。

首先添加数据库连接串:

<connectionStrings>

<add name ="pubsConString" connectionString="server=localhost;database=pubs;uid=sa;pwd=mypassword;"/>

</connectionStrings>

其次添加caching节:

<system.web>

<caching>

<sqlCacheDependency enabled="true">

<databases>

<add name="pubs" connectionStringName="pubsConString" pollTime="900"/>

</databases>

</sqlCacheDependency>

</caching>

</system.web>

下面是测试代码,当页面加载的时候执行如下代码:

protected void Page_Load(object sender, EventArgs e) {

if (HttpContext.Current.Cache["xxx"] == null) {

SqlCacheDependency d = new SqlCacheDependency("pubs","authors");//pubs就是databases节指定的pubs,后面是表名

HttpContext.Current.Cache.Insert("xxx", "xxx", d);

Response.Write("Create new cache value is xxx.");

}

else{

Response.Write("Load data from cache,value is "+HttpContext.Current.Cache["xxx"].ToString());

}

}

当首次打开该页面将显示:

Create new cache value is xxx.

刷新页面后显示:

Load data from cache,value is xxx

当使用查询分析器修改authors里面的数据再次刷新页面将显示:

Create new cache value is xxx.

这说明Cache正常工作了,当表authors变化Cache里面的内容会自动失效,我的应用程序也会重新创建一个Cache对象。

注意:SqlCacheDependency由两个构造函数,SqlServer2000只支持两个参数的,一个参数的支持SqlServer2005。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有