使用SQL Server高速缓存依赖性的步骤:
一,使数据库支持SQL高速缓存依赖性。
二,使表支持SQL高速缓存依赖性。
三,在ASP.NET应用程序的web.config文件中包含SQL连接字符串。
四,以如下方式利用SQL高速缓存依赖性:
1)在代码中编程创建一个SqlCacheDependency对象。
2)给OutputCache指令添加SqlCacheDependency属性。
3)通过Response.AddCacheDependency给Response对象添加一SqlCacheDependency实例。
开启高速缓存依赖性的参数简要说明
-d 用于SQL高速缓存依赖性的数据库名。数据库可以使用连接字符串和-c选项指定(必选)
-ed 允许数据库启用SQL高速缓存依赖性。
-dd 禁止数据库启用SQL高速缓存依赖性。
-et 允许表启用SQL高速缓存依赖性。需要-t选项。
-dt 禁止表启用SQL高速缓存依赖性。需要 -t 选项。
-t 支持或禁止SQL高速缓存依赖性的表名。需要 -et 或 -dt 选项。
-lt 列出所有启用SQL高速缓存依赖性的表。
具体执行命令步骤如下:
(1)开启数据库的Broker。
(2)aspnet_regsql -S localhost -U sa -P sa -d Northwind -ed
注:将本机上的Northwind数据库开启高速缓存依赖功能。
(3)aspnet_regsql -S localhost -U sa -P sa -d Northwind -dd
注:禁用本机上的Northwind数据库的高速缓存依赖功能。使用次命令后,数据库中的所有表的高速缓存禁用功能都自动关闭,AspNet_SqlCacheTablesForChangeNotification表也会自动删除。
(4)aspnet_regsql -S localhost -U sa -P sa -d Northwind -t Products -et
注:为Northwind数据库中的Products表开启高速缓存依赖功能。
(5)aspnet_regsql -S localhost -U sa -P sa -d Northwind -t Products -dt
注:为Northwind数据库中的Products表关闭高速缓存依赖功能。通过这个方法可以为一个数据库中的一个或多个表开启高速缓存依赖功能。为数据库和表开启高速缓存依赖功能后,可以发现Northwind数据库中添加了一个AspNet_SqlCacheTablesForChangeNotification表,表示配置成功了。
(6)aspnet_regsql -S localhost -U sa -P sa -d Northwind -lt
使用-lt参数可以查看该数据库中哪些表开启了高速缓存依赖功能。如果数据库关闭了高速缓存依赖或者没有启用高速缓存依赖功能,使用此命令将会得到错误提示。
说明:我们在创建数据库的缓存依赖时,需要执行步骤(1)、(2)和(4),当要取消时,执行步骤(3)和(5)。
如下具体实现
aspnet_regsql.exe /S 服务器名 -d 数据库名 -t 数据表名 -et -E -ed
例如:aspnet_regsql.exe /S (local) -d mydatabase -t mytable -et -E -ed
在使用的过程当中,在类型中使用的SqlCacheDependency中设置的数据表名与上面的mytable的大小写要一致
也就是说如果
aspnet_regsql.exe /S (local) -d mydatabase -t mytable -et -E -ed
那么在添加SQL缓存依赖时
dim cd as SqlCacheDependency = sqlCacheDependency("mydatabase","mytable")
而不能是
dim cd as SqlCacheDependency = sqlCacheDependency("mydatabase","MyTable")
关于SQL 2005的高速缓存禁用功能
SQL Server2005支持高速缓存的编程和声明技术。在OupputCache指令中使用CommandNotification字符串就可以给页面建立基于通知的高速缓存。可以编程指定SQL高速缓存选项,或声明该选项,但不能同时使用这两种方法。SQL2005的缓存依赖无需web.config的配置,也不用为数据库和表开启缓存依赖功能,由于05内置了一个通知传递服务,该服务可以实现检测数据的更改、实现更改通知传递等功能,因此不需要不断轮询数据库来检测数据更新了。
注:虽然05中的缓存依赖使用很简单,但目前我还没有找到更多的相关资料,还没有亲自进行测试,主要原因还没搞清楚怎么才能开启Broker服务,以后有时间在进行测试吧。
配置ASP.NET应用程序
使用数据库和其中的几个表支持SQL Server高速缓存禁用功能后,就要为SQL Server高速缓存禁用功能配置应用程序。
要配置应用程序,以使用SQL Server高速缓存禁用功能,首先应修改web.config文件。在此文件中,指定要使用的数据库,并让ASP.NET连接它。
如:
name="NorthwindConnectionString" connectionString="Da
providerName="System.Da
注: 首先使用web.config文件中的元素,建立了与数据库的连接字符串。然后通 过元素为SQL Server高速缓存功能进行配置。要是使用SQL Server高速缓存依赖性,所以必须使用节点,并启用该功能。在节点中引用数据库。
元素中的属性说明:
name:为SQL Server数据库提供一个标识符。
connectionStringName:指定连接的名称。
pollTime:指定SQL Server轮流检测的时间间隔,默认为5秒或500毫秒。SQL 2005通知功能不需要这个属性。
web.config文件配置正确后,就可以在页面上使用SQL Server高速缓存禁用功能了。ASP.NET会把SQLServer请求放在AspNet_SqlCacheTablesForChangeNotification表的一个完全不同的线程上,看看changeId号是否递增了,如果该数字有变化,ASP.NET就知道对底层的SQLServer表进行了修改,应检索一个新的结果集。它确定是否应进行SQLServer调用时,对AspNet_SqlCacheTablesForChangeNotification表的请求会得到一个结果,启动了SQLServer高速缓存禁用功能后,这些执行得非常快。
为页面添加多个表,如下(用分号隔开):
-------------------------------------------------------------
转自另一篇文章
使用方法和步骤如下:
step1
检测是否已经启用ServiceBroker,检测方法:
SelectDATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled')
--1表示已经启用0表示没有启用
step2
如果ServiceBroker没有启用,使用下面语句启用:
ALTERDATABASE数据库名称SETENABLE_BROKER;
step3
在实现基于服务的SQL数据缓存依赖过程中,需要显式调用SqlDependency.Start来启动接受依赖项更改通知的侦听器。
SqlDependency.Start(connectionString);//推荐将这段代码加到Global.asax的Application_Start方法中
SqlDependency.Stop(connectionString);//用于关闭,可加在Global.asax的Application_End方法中
step4
该步骤分别有两种不同的做法。该阶段必须注意步骤。
方法A:建立连接对象,再创建一个SqlCommand实例,创建SqlCacheDependency实例,在这步之后再调用Command对象来获取数据(这个顺序很重要)。之后调用Cache的Insert语句建立一个依赖于一个具体查询数据集的Cache项。
SqlConnectionconn=newSqlConnection(strConnection);SqlCommandcommand=newSqlCommand(strCommandText,conn);
SqlCacheDependencydependency=newSqlCacheDependency(command);
//注册方法到委托,该委托是
CacheItemRemovedCallbackonRemove=newCacheItemRemovedCallback(RemovedCallback);
//新增或修改一条缓存记录
Cache.Insert(strCacheKey,objAppCache,dependency,absoluteExpiration,slidingExpiration,CacheItemPriority.Default,onRemove);
方法B:建立连接对象,再创建一个SqlCommand实例,最后创建SqlDependency实例。定义SqlDependency的委托OnChange,当数据发生改变时做出相应的处理(比如清除Cache)。
SqlConnectionconn=newSqlConnection(strConnection);SqlCommandcommand=newSqlCommand(strCommandText,conn);
SqlCacheDependencydependency=newSqlCacheDependency(command);
dependency.OnChange+=newOnChangeEventHandler(Dependency_OnChange);
注意事项:
不知道是不是还存在BUG,我在项目开发中遇到一些奇怪的现象。同样的代码,在有的机器上运行则能捕捉到变化,有的则完全没反应;也有时会出现Cache刚建立就反复发生依赖改变的事件。偶尔Cache还会数据发生变化却不引发事件。
但从最终项目实施的情况看,似乎都只是某些机器环境造成的不确定因素?这个无法确定。不过起码数据库端是否正常启用,可以通过SQLServerProfiler来查看监视。