国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何在asp.net2.0下面使用基于數據庫(sqlserver2000)的cache

2019-11-18 16:32:03
字體:
來源:轉載
供稿:網友

在.NET1.1下面Cache只能基于文件系統、對象等做Cache的依賴項,但是在.NET 2.0提供了一個新的依賴項SqlCacheDependency,這個項使我們Cache依賴數據庫的變化來改變。雖然這做法看起來和1.1里面的變通做法相似,但是它們之間還是有本質的區別(SqlCacheDependency對象的提供)。(1.1的變通做法是為數據表創建觸發器,然后該觸發器在觸發的時候會修改一個本地文件,系統中的某一個Cache的依賴項就是這個本地的文件,這樣來通知Cache所緩存的數據變化了)
     .NET 2.0的SqlCacheDependency可以在SqlServer2000以后的版本使用,本文介紹在Sql Server 2000下的使用方法,Sql Server 2005的稍有不同。

       首先需要安裝.NET 2.0的框架,當然Sql Server 2000一定要有了。在.NET 2.0里微軟提供了一個實用工具:aspnet_regsql(和aspnet_regiis在同一個目錄下面),這是一個命令行工具,該命令行參數可以通過aspnet_regsql -?獲得。這里我們關心下面幾個參數:-ed為SQL緩存依賴項啟動數據庫,-E使用當前的windows憑據進行身份驗證,-d用于應用服務器的數據庫名稱,如果未指定任何數據庫名稱,則使用默認數據庫“aspnetdb”。本文中將使用微軟的示例數據庫pubs。那么我們就要使用下面的命令行來創建緩存依賴數據庫:

aspnet_regsql -ed -E -d pubs
(注意:這里的命令行參數是去分大小寫的)

     當執行完這個命令后,我們可以打開pubs數據庫看看發生了什么變化,首先多了一個表:AspNet_SqlCacheTablesForChangeNotification,這個表里面有3個字段,tableName:監視的表名稱,notificationCreated:創建時間。changeId:變化編號(累加字段)。還可以看到該數據庫多了幾個存儲過程,他們分別是:

AspNet_SqlCacheRegisterTableStoredPRocedure,

AspNet_SqlCacheUnRegisterTableStoredProcedure,
AspNet_SqlCacheUpdateChangeIdStoredProcedure,
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,
AspNet_SqlCachePollingStoredProcedure
 
     從字面上這幾個存儲過程都很好理解,該存儲過程的詳細內容可以在查詢分析器里面打開后查看。為了可以監視一個表的變化,我們需要通過執行AspNet_SqlCacheRegisterTableStoredProcedure存儲過程來指定一個需要監視的表,當然也可以通過實用工具aspnet_regsql來指定,命令行如下:
aspnet_regsql -et -E -d pubs -t authors
 
     通過執行上面的命令以后,aspnet_regsql會為authors創建一個觸發器,下面是我執行該命令后創建的觸發器:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER  TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] ON [authors]
                       FOR INSERT, UPDATE, DELETE AS BEGIN
                       SET NOCOUNT ON
                       EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'authors'
                       END
                      
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
     從觸發器可以看出,當對authors表插入,刪除以及更新的時候都會執行存儲過程AspNet_SqlCacheUpdateChangeIdStoredProcedure,該存儲過程會向AspNet_SqlCacheTablesForChangeNotification表里面添加一條記錄。記錄如下:
tableName    notificationCreated      changeId   
authors      2006-06-20 09:38:26.267  1
     當你對authors里面的數據做任何修改changeId都會累加,其他字段不變化。
 
     接著要在web.config里面添加一些內容就可以使用了。
首先添加數據庫連接串:
<connectionStrings>
    <add name ="pubsConString" connectionString="server=localhost;database=pubs;uid=sa;pwd=mypassWord;"/>
  </connectionStrings>

其次添加caching節:
<system.web>
    <caching>
      <sqlCacheDependency enabled="true">
        <databases>
          <add name="pubs" connectionStringName="pubsConString" pollTime="900"/>
        </databases>
      </sqlCacheDependency>
    </caching>
</system.web>
 
下面是測試代碼,當頁面加載的時候執行如下代碼:

protected void Page_Load(object sender, EventArgs e) {
        if (HttpContext.Current.Cache["xxx"] == null) {
            SqlCacheDependency d = new SqlCacheDependency("pubs","authors");//pubs就是databases節指定的pubs,后面是表名
            HttpContext.Current.Cache.Insert("xxx", "xxx", d);
            Response.Write("Create new cache value is xxx.");
        }
        else{
            Response.Write("Load data from cache,value is "+HttpContext.Current.Cache["xxx"].ToString());
        }
    }
 
當首次打開該頁面將顯示:
Create new cache value is xxx.

刷新頁面后顯示:
Load data from cache,value is xxx

當使用查詢分析器修改authors里面的數據再次刷新頁面將顯示:
Create new cache value is xxx.

這說明Cache正常工作了,當表authors變化Cache里面的內容會自動失效,我的應用程序也會重新創建一個Cache對象。
 
注意:SqlCacheDependency由兩個構造函數,SqlServer2000只支持兩個參數的,一個參數的支持SqlServer2005。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝城县| 寿宁县| 达日县| 中西区| 达孜县| 延吉市| 林西县| 松潘县| 郧西县| 南和县| 五大连池市| 福泉市| 上饶市| 石河子市| 阿城市| 招远市| 永修县| 普兰店市| 平乡县| 荆门市| 环江| 临朐县| 顺昌县| 达州市| 宜兴市| 马龙县| 刚察县| 丹阳市| 嘉荫县| 浏阳市| 宾川县| 华阴市| 临汾市| 曲沃县| 读书| 泰和县| 怀化市| 克拉玛依市| 阜新| 平阳县| 固阳县|