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
<caching>
<sqlCacheDependency enabled="true" pollTime="1000">
<databases>
<add name="mydatabase" connectionStringName="pubsConnectionstring"/>
</databases>
</sqlCacheDependency>
</caching>
註釋:pollTime設置爲1000ms,意思是應用程序按照1s的頻率進行輪詢,若是數據庫表Customers數據被修改,則緩存在1m內失效,從新加載新的數據,而後緩存,知道數據被再次修改,檢測數據庫表的變化,connectionStringName被設置爲要對哪個數據庫進行輪詢的數據庫鏈接字符串
此時已經對sql輪詢模式已經設置完畢。
四.驗證
1.創建頁面default.aspx
2.設置緩存:
[html] view plaincopy
<%@ OutPutCache Duration="20" VaryByParam="none" SqlDependency="mydatabase:Customers" %>
註釋:本頁面緩存20秒,mydatabase爲配置文件中設置sql緩存的項的name值,Customers是要被緩存的表3.頁面測試代碼以下:
[html] view plaincopy
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<%= DateTime.Now.ToString("T") %>
<div>
<asp:GridView runat="server" DataSourceID="srcCustomers" />
<asp:SqlDataSource
runat="server"
ID="srcCustomers"
ConnectionString="<%$ ConnectionStrings:SqlTestConnstring %>"
SelectCommand="SELECT * FROM [SqlTest].[dbo].[Customers]" />
</div>
</form>
</body>
</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的記錄有沒有被修改,若是沒有修改則使用緩存中的數據,若是被修改則從新獲取數據而後放入緩存中。
好了,今天就到這兒哦,若有錯誤,請指正!