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的記錄有沒有被修改,若是沒有修改則使用緩存中的數據,若是被修改則從新獲取數據而後放入緩存中。

好了,今天就到這兒哦,若有錯誤,請指正!

相關文章
相關標籤/搜索