SqlServer数据缓存依赖的功能.doc_第1页
SqlServer数据缓存依赖的功能.doc_第2页
SqlServer数据缓存依赖的功能.doc_第3页
SqlServer数据缓存依赖的功能.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、SQL SERVER 7.0/2000和SQL SERVER 2005的简介及比较 1.1 SQL SERVER 7.0/2000 SQL SERVER 7.0/2000没有提供内置的支持数据缓存依赖的功能,所以只能通过采用添加特定数据库表、触发器等方式,通过后台不断轮询数据库来检查数据更改。当在数据表上执行INSERT、UPDATE、 DELETE操作时将自动发出更改通知,所以只能监测到表级,具体到哪一行是没法跟踪的。 使用方法步骤: 1.1.1 使用aspnet_regsql命令行或SqlCacheDependencyAdmin来配置连接数据库。 1.1.1.1ALTER DATABASE SET ENABLE_BROKER; aspnet_regsql -S -U sa -P sa -d -ed 启动数据库的数据缓存依赖功能 aspnet_regsql -S -U sa -P sa -d -t -et 启动数据表的数据缓存依赖功能 1.1.1.2SqlCacheDependencyAdmin.EnableNotifications(connectionString); /启动数据库的数据缓存依赖功能SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, table); /启用数据表缓存 推荐这段代码写在Global.asax的Application_Start方法中,以便应用程序启动的时候就启用数据库和数据表的缓存依赖功能。 1.1.2 配置Web.config配置在下的结点下,只有一个数据库的话不必指定下一级结点 1.1.3 应用程序数据缓存中使用(还可以在数据源控件、输出缓存整个页面时使用,这里就不介绍了,下同)SqlCacheDependency scd = new SqlCacheDependency(数据库名称,表名);Cache.Insert(.,scd,.); 1.2 SQL SERVER 2005 内置支持SQL数据缓存依赖,内置通知传递服务,能够提供更小粒度的数据更改监测,使用和配置简单。 使用方法步骤: 1.2.1 检测是否已经启用Service BrokerSelect DATABASEpRoPERTYEX(数据库名称,IsBrokerEnabled) - 1 表示已经启用 0 表示没有启用 这个地方我看有些朋友翻译的成“是否能启用”,这是不对的,这里我把英文原文帖出来:“This can be checked by calling Select databasepropertyex(db Name, IsBrokerEnabled). A 1 means that the broker is enabled. A 0 means that the broker is not enabled. ”。 依据我的经验,如果直接在当前SqlServer2005上新建一个数据库的话,默认是打开的,如果是从其他地方数据库导过来的,导入之后默认关闭了。(可能有不准确,大家可以自己试验一下测试一下)。如果已经打开可直接调到1.2.2。 1.2.1.1 启用Service BrokerALTER DATABASE 数据库名称 SET ENABLE_BROKER; 1.2.2 在实现基于服务的SQL数据缓存依赖过程中,需要显式调用SqlDependency.Start来启动接受依赖项更改通知的侦听器。SqlDependency.Start(connectionString); /推荐将这段代码加到Global.asax的Application_Start方法中,SqlDependency.Stop(connectionString); /用于关闭,可加在Global.asax的Application_End方法中。 1.2.3 应用程序数据缓存中使用SqlCommand cmd = new SqlCommand(sql,conn); SqlCacheDependency scd = new SqlCacheDependency(cmd); Cache.Insert(.,scd,.); 注意: a). 必须设置完全限定名称的数据表。即表名前面需要加所有者,如dbo.test。 b). 必须明确设置所访问数据库列名称,不能使用“*”。 c). 必须保证不是聚合函数。如COUNT、MAX等。 1.3 比较、区别SQL SERVER 7.0/2000SQL SERVER 2005实现机制轮询通知传递服务(Service Broker)是否需要配置启用需要不需要,内置支持数据更改检测限于表级更改监测表级、行级更改监测 并且很明显,SQL SERVER 2005的缓存机制更加高效。另外,SqlCacheDependency类还特别结合SQL SERVER 2005 进行了优化: a). 使用SQL SERVER 2005 时,SqlCacheDependency类支持与System.Data.SqlClient.SqlDependency类进行集成。应用程序可创建SqlDependency对象,并通过OnChanged事件处理程序接受通知进行注册。这样,应用程序不仅可以使用Sql server 2005的查询通知机制来监测使用SQL查询结果无效的数据更改,并将缓存对象从缓存中移除,而且还可以轻松获取数据更改通知,以便刷新缓存。(从这里可以看出,当触发onRemoveCallback委托的时候,数据已经从缓存里面删除了,这样一来可以手动在委托里面添加缓存,或者干脆设置成null,让他下次调用的时候再缓存。) b). 不仅向应用程序添加缓存依赖项,还可以与OutputCache指令一起使用,以生成依赖于SqlServer数据库表的输出缓存的页面或用户控件。对于用户控件,OutputCache指令不支持使用SQL SERVER 2005 的查询通知(即onRemoveCallback委托)。 二、System.Web.Caching.Cache Insert和Add区别 2.1 Add方法 object Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); 2.2 Insert方法 void Insert(string key, object value);void Insert(string key, object value, CacheDependency dependencies);void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemUpdateCallback onUpdateCallback);void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); 2.3 比较、区别 a). Insert方法支持5种重载,使用灵活,而Add方法必须提供7个参数; b). Add方法可以返回缓存项的数据对象,Insert 返回Void; c). 添加重复缓存情况下,Insert会替换该项,而Add方法会报错。 三、 CacheDependency、AggregateCacheDependency、SqlCacheDependency 3.1 CacheDependency是AggregateCacheDependency和SqlCacheDependency的父类。主要用于在应用程序数据缓存对象与文件、缓存键、文件或缓存键的数组或另外一个CacheDependency对象之间建立依赖关系。CacheDependency监视依赖关系比便在任何对象更改时自动移除缓存对象。CacheDependency可以监测一组(到文件或目录的)文件路径的更改情况。 3.2AggregateCacheDependency主要用于实现聚合缓存依赖。如一笔数据同时对两个表进行缓存依赖,一旦其中任何一个表数据更改缓存将失效。 3.3 SqlCacheDependency将应用程序数据缓存对象、页面输出缓存、数据源控件等与指定SQL Server数据库表或Sql Server 2005 查询结果之间建立缓存依赖关系,在表发生更改(Sql Server 2005 行级别更改)时,自动从缓存中删除和重新添加与该表关联的缓存对象。一般而言:SqlCacheDependency (SqlCommand) 用于SQL SERVER 2005SqlCacheDependency (数据库名, 表名) 用于SQL SERVER 7.0/2000vs2005中启用数据库缓存依赖aspnet_regsql.exe -S localhost -U sa -P sa -d hnfms -edaspnet_regsql.exe -S localhost -U sa -P sa -d hnfms -t Applys -et数据库端启用缓存依赖ALTER DATABASE hnfms SET ENABLE_BROKER;数据库端查询是否启用缓存依赖Select DATABASEpRoPERTYEX(hnfms,IsBrokerEnabled) - 1 表示已经启用 0 表示没有启用Web.config中配置 Gload.asxm中配置void Application_Start(object sender, EventArgs e) / 在应用程序启动时运行的代码 System.Data.SqlClient.SqlDependency.Start(System.Configuration.ConfigurationManager.ConnectionStringshnfmsC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论