Sql缓存依赖

Sql缓存依赖主要分为两种:

1.轮询模式(poll model)html

2.推模式(push model)web

今天先讲解第一种模式:轮询sql

要使用sql轮询模式,得作三方面的工做:数据库

1.对数据库启用缓存依赖缓存

2.对一个或多个表启用缓存依赖asp.net

3.在web.config中配置应用程序工具

一.对数据启用缓存依赖测试

在visual studio command prompt中执行如下命令spa

aspnet_regsql -C "Data Souce=localhost;Integrated Security=True;Initial Catalog=SqlTest" -ed.net

注释:aspnet_regsql是命令行工具 本命令表示启用SqlTest数据库缓存依赖


当执行该命令后,将会在数据库SqlTest中建立表:AspNet_SqlCacheTablesForChangeNotification,如图:


tableName:记录被缓存的表

notificationCreated:记录缓存被建立的时间

changeId:计数器,当表数据修改后,自动增长1

同事建立5个存储过程:

AspNet_SqlCachePollingStoredProcedure

AspNet_SqlCacheQueryRegisteredTablesStoredProcedure

AspNet_SqlCacheRegisterTableStoredProcedure

AspNet_SqlCacheUnRegisterTableStoredProcedure

AspNet_SqlCacheUpdateChangeIdStoredProcedure

二.对数据表启用缓存依赖

在visual studio command prompt中执行如下命令

aspnet_regsql -C "Data Souce=localhost;Integrated Security=True;Initial Catalog=Pubs" -et -t Customers

注释:对Customers表启用缓存依赖


当执行该命令后,将在数据库表AspNet_SqlCacheTablesForChangeNotification中添加一条记录,如图:


三.配置应用程序

[html] view plaincopy

  1. <caching>  

  2.      <sqlCacheDependency enabled="true" pollTime="1000">  

  3.        <databases>  

  4.          <add name="mydatabase" connectionStringName="pubsConnectionstring"/>  

  5.        </databases>  

  6.      </sqlCacheDependency>  

  7.    </caching>  

注释:pollTime设置为1000ms,意思是应用程序按照1s的频率进行轮询,若是数据库表Customers数据被修改,则缓存在1m内失效,从新加载新的数据,而后缓存,知道数据被再次修改,检测数据库表的变化,connectionStringName被设置为要对哪个数据库进行轮询的数据库链接字符串

此时已经对sql轮询模式已经设置完毕。

四.验证

1.创建页面default.aspx

2.设置缓存:

[html] view plaincopy

  1. <%@ OutPutCache Duration="20" VaryByParam="none" SqlDependency="mydatabase:Customers" %>  

注释:本页面缓存20秒,mydatabase为配置文件中设置sql缓存的项的name值,Customers是要被缓存的表3.页面测试代码以下:

[html] view plaincopy

  1. <html xmlns="http://www.w3.org/1999/xhtml">  

  2. <head runat="server">  

  3.     <title></title>  

  4. </head>  

  5. <body>  

  6.     <form id="form1" runat="server">  

  7.     <%= DateTime.Now.ToString("T") %>  

  8.     <div>  

  9.         <asp:GridView runat="server" DataSourceID="srcCustomers" />  

  10.         <asp:SqlDataSource   

  11.              runat="server"   

  12.              ID="srcCustomers"   

  13.              ConnectionString="<%$ ConnectionStrings:SqlTestConnstring %>"   

  14.              SelectCommand="SELECT * FROM [SqlTest].[dbo].[Customers]" />  

  15.     </div>  

  16.     </form>  

  17. </body>  

  18. </html>  



注意:对属性SqlDependency若是要设置多个表的话,形势以下:

SqlDependency="mydatabase:Customers;mydatabase:Products"

3.运行效果

若是在20s内刷新页面,则时间不会改变,20s后时间被更新,如今咱们修改下customers的数据,而后刷新页面,效果以下:

时间被修改,页面展现的Tom也被更新为fred,当数据库的数据修改后,缓存将在1s(配置文件中的PollTime值)被失效。

原理解析:轮询Sql缓存依赖是最灵活的Sql缓存依赖类型,因此推荐使用轮询sql缓存依赖。轮询模式使用的是数据库触发器,当表数据被修改时,触发器被触发,则表AspNet_SqlCacheTablesForChangeNotification中的记录ChangeId字段自定加1。

asp.net framework 使用一个后台线程,用来按期轮询数据库表的修改状况,若是有修改,则依赖于数据库表的缓存项目从缓存中移除。应用程序每次在查询数据时现检测表AspNet_SqlCacheTablesForChangeNotification的记录有没有被修改,若是没有修改则使用缓存中的数据,若是被修改则从新获取数据而后放入缓存中。

好了,今天就到这儿哦,若有错误,请指正!

相关文章
相关标签/搜索