高速缓存依赖分析,Net中的缓存依赖配置

一,使数据库支持SQL高速缓存依赖性。
二,使表支持SQL高速缓存依赖性。
三,在ASP.NET应用程序的web.config文件中包含SQL连接字符串。
四,以如下方式利用SQL高速缓存依赖性:
     1)在代码中编程创建一个SqlCacheDependency对象。
     2)给OutputCache指令添加SqlCacheDependency属性。
    
3)通过Response.AddCacheDependency给Response对象添加一SqlCacheDependency实例。

缓存——能非常好的提高网站的性能。

开启高速缓存依赖性的参数简要说明
-d
<database>    
用于SQL高速缓存依赖性的数据库名。数据库可以使用连接字符串和-c选项指定(必选)
-ed              
允许数据库启用SQL高速缓存依赖性。
-dd              
禁止数据库启用SQL高速缓存依赖性。
-et              
允许表启用SQL高速缓存依赖性。需要-t选项。
-dt              
禁止表启用SQL高速缓存依赖性。需要 -t 选项。
-t
<table>         支持或禁止SQL高速缓存依赖性的表名。需要 -et
或 -dt 选项。
-lt              
列出所有启用SQL高速缓存依赖性的表。

在訪问量大,但更新较少的站点中使用缓存,能够大大提高执行效率。

在SQL Server 2000中使用高速缓存禁用功能(在2005中也可以进行如下设置)
要在SQL
2000中使用高速缓存禁用功能,必须执行如下两步:
第一步是使相应的数据库支持该功能。
第二步是使要使用的表支持该功能。
例:
aspnet_regsql -S localhost -U sa -P sa -d
Northwind -ed
注:将本机上的Northwind数据库开启高速缓存依赖功能。
aspnet_regsql
-S localhost -U sa -P sa -d Northwind -dd
注:禁用本机上的Northwind数据库的高速缓存依赖功能。使用次命令后,数据库中的所有表的高速缓存禁用功能都自动关闭,AspNet_SqlCacheTablesForChangeNotification表也会自动删除。
开启表的高速缓存依赖功能。
例:
aspnet_regsql -S
localhost -U sa -P sa -d Northwind -t Products -et
注:为Northwind数据库中的Products表开启高速缓存依赖功能。
aspnet_regsql -S
localhost -U sa -P sa -d Northwind -t Products -dt
注:为
Northwind数据库中的Products表关闭高速缓存依赖功能。通过这个方法可以为一个数据库中的一个或多个表开启高速缓存依赖功能。为数据库和表开启高速缓存依赖功能后,可以发现Northwind数据库中添加了一个
AspNet_SqlCacheTablesForChangeNotification表,表示配置成功了。
aspnet_regsql -S
localhost -U sa -P sa -d Northwind -lt
使用-lt参数可以查看该数据库中哪些表开启了高速缓存依赖功能。如果数据库关闭了高速缓存依赖或者没有启用高速缓存依赖功能,使用此命令将会得到错误提示。

在.net中给我们提供了非常好的缓存机制。页面缓存、数据缓存,还有非常好的依赖缓存。

关于SQL 2005的高速缓存禁用功能
SQL Server
2005支持高速缓存的编程和声明技术。在OupputCache指令中使用CommandNotification字符串就可以给页面建立基于通知的高速缓存。可以编程指定SQL高速缓存选项,或声明该选项,但不能同时使用这两种方法。SQL2005的缓存依赖无需web.config的配置,也不用为数据库和表开启缓存依赖功能,由于05内置了一个通知传递服务,该服务可以实现检测数据的更改、实现更改通知传递等功能,因此不需要不断轮询数据库来检测数据更新了。
注:虽然05中的缓存依赖使用很简单,但目前我还没有找到更多的相关资料,还没有亲自进行测试,主要原因还没搞清楚怎么才能开启Broker服务,以后有时间在进行测试吧。

依赖缓存优点就是,跟相依赖的项的改变有关。比方cacheTable表有数据改变时,数据已经缓存了的就会被清楚,又一次读取新的数据,能保持数据的实时更新。

配置ASP.NET应用程序
使用数据库和其中的几个表支持SQL
Server高速缓存禁用功能后,就要为SQL
Server高速缓存禁用功能配置应用程序。
要配置应用程序,以使用SQL
Server高速缓存禁用功能,首先应修改web.config文件。在此文件中,指定要使用的数据库,并让ASP.NET连接它。
如:
    <connectionStrings>
         <add name=”NorthwindConnectionString”
connectionString=”Data Source=.;Initial Catalog=Northwind;User
ID=sa;Password=sa”
             providerName=”System.Data.SqlClient” />
     </connectionStrings>
     <system.web>
      <caching>
         <sqlCacheDependency enabled=”true” pollTime=”500″>
           <databases>
             <clear/>
             <add name=”Northwind” connectionStringName
=”NorthwindConnectionString” pollTime=”500″/>
           </databases>
         </sqlCacheDependency>
       </caching>
     </system.web>
注:首先使用web.config文件中的<connectionStrings>元素,建立了与数据库的连接字符串。然后通过<caching>元素为SQL
Server高速缓存功能进行配置。要是使用SQL
Server高速缓存依赖性,所以必须使用<sqlCacheDependency
enabled=”true”>节点,并启用该功能。在<databases>节点中引用数据库。
<add>元素中的属性说明:
name:为SQL
Server数据库提供一个标识符。
connectionStringName:指定连接的名称。
pollTime:指定SQL
Server轮流检测的时间间隔,默认为5秒或500毫秒。SQL
2005通知功能不需要这个属性。
web.config 文件配置正确后,就可以在页面上使用SQL
Server高速缓存禁用功能了。ASP.NET会把SQL
Server请求放在AspNet_SqlCacheTablesForChangeNotification表的一个完全不同的线程上,看看
changeId号是否递增了,如果该数字有变化,ASP.NET就知道对底层的SQL
Server表进行了修改,应检索一个新的结果集。它确定是否应进行SQL
Server调用时,对AspNet_SqlCacheTablesForChangeNotification表的请求会得到一个结果,启动了SQL
Server高速缓存禁用功能后,这些执行得非常快。

头几天学习了下sql 依赖缓存,实现过程和步骤记录下:

为页面添加多个表,如下(用分号隔开):
<%@ OutputCache
Duration=”3600″ VaryByParam=”none” SqlDependency=”Northwind:Employees;Northwind:Customers”
%>

环境:windows 2003+IIS6  ,SQL2008+VS2008

您可能感兴趣的文章:

  • sqlserver
    中一些常看的指标和清除缓存的方法
  • 开启SQLSERVER数据库缓存依赖优化网站性能
  • SqlServer
    执行计划及Sql查询优化初探
  • 优化SQL
    Server的内存占用之执行缓存
  • SQLSERVER中得到执行计划的两种方式
  • 强制SQL
    Server执行计划使用并行提升在复杂查询语句下的性能
  • 浅析SQL
    Server中的执行计划缓存(上)
  • 浅析SQL
    Server中的执行计划缓存(下)

 

一、首先在sql2008中创建数据库CacheDB,创建表CacheTable

然后在Visual Studio 命令提示下 执行aspnet_regsql.exe
应用程序(也能够在cmd下找到C:/Program Files/Microsoft Visual Studio
9.0/VC>执行)

直接执行asp.net_regsql.exe创建的是选择的数据库的其它特性表。如:aspnet_Roles 
等。

以下以数据库CacheDB,数据表CacheTable为例;

要创建数据库的依赖缓存 须执行例如以下命令:

aspnet_regsql -S localhost -U sa  -P 123456 -d CacheDB -ed   
//打开依赖的数据库。然后在创建依赖数据表

aspnet_regsql -S localhost -U sa  -P 123456 -d CacheDB -et -t
CacheTable   //创建依赖数据表

 

当执行以上命令后会出现数据表 :
AspNet_SqlCacheTablesForChangeNotification

 

aspnet_regsql 命令參数说明:

 -? 显示该工具的帮助功能;

 -S 后接的參数为数据库server的名称或者IP地址;

 -U 后接的參数为数据库的登陆username。

 -P 后接的參数为数据库的登录password;

 -E 当使用windows集成验证时,使用该功能;

 -d 后接參数为对哪一个数据库採用SqlCacheDependency功能;

 -t 后接參数为对哪一个表採用SqlCacheDependency功能;

 -ed 同意对数据库使用SqlCacheDependency功能;

 -dd 禁止对数据库採用SqlCacheDependency功能;

 -et 同意对数据表採用SqlCacheDependency功能;

 -dt 禁止对数据表採用SqlCacheDependency功能;

 -lt 列出当前数据库中有哪些表已经採用sqlcachedependency功能。

 

以上步骤是在数据库方面要实现处理的

 

二、配置站点的web.config

在system.web 节点中加入。缓存配置,代码例如以下

这中方式主要是採用数据查询轮询的方式

 

 

[xhtml] view
plaincopy

  1. <system.web>  
  2.     <!–依赖缓存–>  
  3.     <caching>  
  4.       <!–5秒种轮询一次–>  
  5.       <sqlCacheDependency enabled=”true” pollTime=”5000″>  
  6.         <databases>  
  7.           <add  name=”CacheDB” connectionStringName=”SQLServer”/>  
  8.         </databases>  
  9.           
  10.           
  11.       </sqlCacheDependency>  
  12.         
  13.     </caching>  
  14. </system.web>  

 

參数说明:pollTime:轮换的时间 (毫秒),”CacheDB”
:为依赖的数据库,SQLServer
:为数据库连接字符串。connectionStringName中的。

三、代码实现

    1、 对页面输出缓存使用轮询SQL缓存依赖
    依据上面的web.config配置
    在要缓存的页面中  <%@ OutputCache Duration=”6000″
VaryByParam=”none” SqlDependency=”CacheDB:CacheTable” %> 
CacheTable为数据表

当CacheTable数据表有修改时,刷新后会显示新的数据。

  2、对数据缓存使用轮询SQL缓存依赖

      对多个表实现依赖缓存,代码例如以下:

[c-sharp] view
plaincopy

  1. //这里用GridView对数据进行绑定  
  2.   
  3. public void BindData()  
  4. {  
  5.     string[] tableName = new string[]{“Cache”,”CacheTable” };//这里用cache表和CacheTable表,cache表的数据库的依赖建立方法如cacheTable。  
  6.      AggregateCacheDependency aggregateDependency = new AggregateCacheDependency();//实例化AggregateCacheDependency,用于多个实例SqlCacheDependency的载入  
  7.       DataSet ds = Cache[“gridview”] as DataSet;//从缓存中读取数据  
  8.      if (ds == null)  
  9.        {  
  10.           ds = DBHelper.ExecuteAdapter(“select * from CacheTable inner join Cache on CacheTable.ID=Cache.cacheID”);//从数据库中读取数据 。返回DataSet,ExecuteAdapter用的SQLHelper中的訪问方法  
  11.               
  12.           foreach (string table in tableName)  
  13.              {  
  14.                 aggregateDependency.Add(new SqlCacheDependency(“Cache”, table));//把依赖实例载入到数组中   
  15.              }   
  16.             // SqlCacheDependency Dependency = new SqlCacheDependency(“Cache”,”CacheTable”);//对单个表依赖缓存 直接实例化  
  17.             Cache.Insert(“gridview”, ds, aggregateDependency);//加入到缓存中  
  18.               Response.Write(DateTime.Now.ToString());//输出当前时间,以測试是否缓存成功,  
  19.   
  20.   
  21.        }  
  22.     
  23.         GridView1.DataSource = ds;  
  24.             GridView1.DataBind();  
  25. }  

 

 

 以上代码为在数据缓存中使用的依赖缓存

 

注意:在web.config 中的DBCahce 和页面输出缓存中的DBCache:cahceTabel中
变量的大写和小写要与在用aspnet_regsql.exe建立 数据缓存那大写和小写一样

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注