亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

ASP.NET 2.0 中的SqlCacheDependency特性,and

系統 2641 0

ASP.NET 中的 Page Cache 是個很有用的東東,只要簡單的在頁面上方加上一個 OutputCache 標簽,就可以讓頁面在制定的 Duration 內直接把自動保存在緩存中的頁面內容輸出,而不需要讓 ASP.NET 引擎再次執行頁面代碼,當然,節省這點執行時間并不是最主要的理由,主要理由是如果頁面內容是從數據庫中取出,那么就可以省去連接數據庫、取數據的步驟,這個好處可大了。

?

PageCache 有點小小的問題,比如,很多 ASP.NET 論壇的首頁就用了 PageCache ,所以在一個版里面貼出的最新的帖子并不會馬上反映到首頁上,而是需要等上一段時間。雖然有點無可奈何,但在某些場合(比如易趣用來顯示物品拍賣狀態的頁面),這種延遲是不允許的。

?

也即是說, ASP.NET 里面的 Cache 并不能自動根據數據庫中相應數據發生了變化,而使相應的 Cache 過期, ASP.NET 2.0 中新增的 SqlCacheDependency 特性使這成為了可能。(當然,只要我們明白了 ASP.NET 2.0 中的大致實現方式,我們可以基于 ASP.NET 1.0 把這個特點實現出來,后面我總結了相應的方法。)

?

要在 ASP.NET 2.0 中應用 SqlCacheDependency 特性,步驟如下(基于大家手里的 Whidbey PDC 版本):

?

1、 ? 使數據庫支持 SqlCacheDependency

?

.Net Framework 1.2 的安裝目錄下(通常是 WINDOWS\Microsoft.NET\Framework\v1.2.30703 ),有一個 aspnet_regsqlcache.exe ,這個命令行工具讓我們的 SqlServer 7.0 或者 SqlServer 2000 能支持 SqlCacheDependency 特性,

首先:“ aspnet_regsqlcache –S 服務器名稱 –U 登陸 ID –P 密碼 –d 數據庫名稱 –ed ”,這個命令使指定數據庫支持 SqlCacheDependency

?

然后我們再加入要追蹤的數據表:“ aspnet_regsqlcache –S 服務器名稱 –U 登陸 ID –P 密碼 –d 數據庫名稱 –t 要追蹤的數據表的名稱 –et ”,這個命令使指定的 Table 支持 SqlCacheDependency

?

它在幕后做了什么事情呢?

?

首先,它在指定的數據庫中新建了一個 Table ,叫做“ AspNet_SqlCacheTablesForChangeNotification ”,這個表有三個字段,“ tableName ”記錄要追蹤的數據表的名稱,“ notificationCreated ”記錄開始追蹤的時間,“ changeId ”是一個 int 類型的字段,每當追蹤的數據表的數據發生變化時,這個字段的值就加 1

?

它還會在指定的數據庫中增加幾個存儲過程,用來讓 ASP.NET 引擎查詢追蹤的數據表的情況。

?

然后,它會給我們要追蹤的 Table 加上幾個 Trigger ,分別對應到 Insert Update Delete 操作,這幾個 Trigger 的語句非常簡單,就是把“ AspNet_SqlCacheTablesForChangeNotification ”表中對應“ tableName ”字段為這個追蹤的表的名稱的記錄的“ changeId ”字段加上一個 1

?

ASP.NET 引擎通過執行它加上的存儲過程“ AspNet_SqlCachePollingStoredProcedure ”,這個存儲過程直接返回“ AspNet_SqlCacheTablesForChangeNotification ”表的內容,讓 ASP.NET 引擎知道哪個表的數據發生的變化。默認每 500 毫秒執行這個存儲過程一次,不過可以在 web.config 里面修改這個間隔時間,我的經驗是這個查詢操作也是很耗資源的,呵呵。

?

2、 ? web.config 配置

?

web.config 里面的配置再簡單不過了

?

<configuration>

?????? <!-- 加上合適的數據庫連接字符串 -->

?????? <connectionStrings>

????????????? <add name="SqlServerConnectionString"

?????? ?????? connectionString="server=sqlserver1;uid=sa;pwd=

password;database=PortalDB " />

?????? </connectionStrings>

?????? <system.web>

????????????? <!-- 配置 Cache 一段,使之支持 SqlCacheDependency -->

????????????? <cache>

???????????????????? <sqlCacheDependency enabled="true" pollTime="500">

??????????????????????????? <databases>

?????????????????????????????????? <add name=" PortalDB "

????????????????????????????????????????? ? connectionStringName=" SqlServerConnectionString " />

??????????????????????????? </databases>

???????????????????? </sqlCacheDependency>

????????????? </cache>

?????? </system.web>

</configuration>

?

3、 ? 在頁面上的 outputCache 標簽中指定 SqlCacheDependency 特性:

?

<%@ outputcache duration="9999" varybyparam="None" sqldependency="PortalDB: 追蹤的數據表名稱 " %>

?

只要在這個追蹤的 Table 上執行了 Insert Update Delete 操作,數據表上的 Trigger 就會將數據庫中“ AspNet_SqlCacheTablesForChangeNotification ”表的相應記錄的相應“ changId ”字段值修改,然后 ASP.NET 引擎就會通過獲取新的值來得知追蹤的 Table 的內容發生了變化,自動使這個頁面的 cache 失效。

?

后話 1 What about Yukon

?

從上面可以知道, SqlServer 并沒有內置自動追蹤數據表的數據變化,然后通知 ASP.NET 引擎的功能(這是肯定的, SqlServer 都出來 N 久了),所以 ASP.NET 2.0 的開發組人為的加上了定制的 Table Trigger StoredProcedure 等等來實現數據更改追蹤。而 Yukon 已經不必這么麻煩了, Yukon 內置了一個 Notification Delivery Service ,這個服務會通過 WebServer 80 端口直接通知一個 IIS 內置的監聽器,然后這個監聽器再通知 ASP.NET

?

而且大家可以注意到,上面描述的那種追蹤方式只能追蹤到表一級的數據更改,即 ASP.NET 引擎最后只能得知某個表的數據發生了更改,而到底是哪一條記錄發生了更改,是追蹤不到的,而 Yukon Notification Delivery Service 可以實現記錄一級的追蹤。

?

后話 2 、可以在現在的 ASP.NET 上實現嗎?

?

當然可以,我們先按照上面講的第一個步驟(或者自己定義一套規則來實現在數據庫中對 Table 數據變化的追蹤),依照葫蘆畫瓢來自己添加上這些 Table Trigger 什么的。

?

ASP.NET PageCache 有一個 VaryByCustom 屬性的,這個屬性可以實現讓我們自己定義“緩存過期”的規則(確切的說,其實它是可以讓我們自定義緩存頁的版本,但間接可以實現自定義的緩存“過期”啦,呵呵),只要我們在 global.asa 中重寫 HttpApplication.GetVaryByCustomString() 方法,這個方法根據輸入的參數字符串,比如“ CheckDBTable=Users ”,查詢數據庫中那個“ AspNet_SqlCacheTablesForChangeNotification ”(或者你自己定義的某個追蹤記錄表),直接讓這個 GetVaryByCustomString() 方法返回“ changeId ”字段的值即可。 VaryByCustom 的用法 MSDN 文檔上有詳細說明。

?

后話 3 GolfClubShack 示范程序

在博客堂前面的某篇文章里面,提供了一個基于 ASP.NET 2.0 GolfClubShack 站點的示范程序,是非常好的東東,在那個里面可以看到包括 SqlCacheDependency 在內的眾多 ASP.NET 2.0 的特性的體現。現在網上完整的 ASP.NET 2.0 的示范程序不多,聽說 MS 內部已經把 IBuySpy 移植到 ASP.NET 2.0 上面了,不知詳情如何。而 MS 還在 alpha 階段的 AspNetForums 2.0 還是基于 .Net Framework 1.1 的(我以前一直是以為是基于最新的 ASP.NET 2.0 的,安裝了好半天,暈 ... )。

?

后話 4 、明天開始上班啦!!!

?

春節假期終于完了,這個春節沒有回家,留在深圳過年。今年深圳春節真冷啊,嗚嗚 家里又沒有寬帶,只能撥號上網,痛苦不堪。從明天開始,又要開始工作了,不知道要幾天才能恢復春節顛倒過來的生物鐘。

ASP.NET 2.0 中的SqlCacheDependency特性,and 明天開始上班啦!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天做天天爰夜夜爽 | 日本自己的私人影院 | 色播99| 97理论三级九七午夜在线观看 | 情趣视频网站在线观看 | 久久久精品2018免费观看 | 亚洲精品乱码久久久久 | 性做久久久久久久久25的美女 | 免费人成激情视频在线观看冫 | 国产与自拍 | 国产亚洲精品久久久久91网站 | 久视频免费精品6 | 日韩经典欧美一区二区三区 | 日韩在线视频在线 | 色六月丁香 | 纯欧美一级毛片免费 | 国产一级毛片欧美视频 | 国产精品九九视频 | 中文亚洲欧美 | 色综合久久最新中文字幕 | 欧美一区二区视频 | 欧美亚洲一区二区三区在线 | 欧美亚洲国产成人高清在线 | 高清在线亚洲精品国产二区 | 欧美日韩综合在线视频免费看 | 欧美日韩一区二区在线观看 | 操的好爽视频 | 男女拍拍视频黄的全免费 | 国产精品第一页爽爽影院 | 91在线网址 | 伊人一本之道 | 黄色在线观看网站 | 久久国产精品永久免费网站 | 精品天海翼一区二区 | 秋霞在线观看成人高清视频51 | 99在线免费观看 | 韩国一大片a毛片 | 国外成人在线视频 | www.中文字幕.com | 日韩经典中文字幕 | 久久综合一本 |