欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

ASP.NET 2.0 中的SqlCacheDependency特性,and

系統(tǒng) 2741 0

ASP.NET 中的 Page Cache 是個(gè)很有用的東東,只要簡(jiǎn)單的在頁(yè)面上方加上一個(gè) OutputCache 標(biāo)簽,就可以讓頁(yè)面在制定的 Duration 內(nèi)直接把自動(dòng)保存在緩存中的頁(yè)面內(nèi)容輸出,而不需要讓 ASP.NET 引擎再次執(zhí)行頁(yè)面代碼,當(dāng)然,節(jié)省這點(diǎn)執(zhí)行時(shí)間并不是最主要的理由,主要理由是如果頁(yè)面內(nèi)容是從數(shù)據(jù)庫(kù)中取出,那么就可以省去連接數(shù)據(jù)庫(kù)、取數(shù)據(jù)的步驟,這個(gè)好處可大了。

?

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

?

也即是說(shuō), ASP.NET 里面的 Cache 并不能自動(dòng)根據(jù)數(shù)據(jù)庫(kù)中相應(yīng)數(shù)據(jù)發(fā)生了變化,而使相應(yīng)的 Cache 過(guò)期, ASP.NET 2.0 中新增的 SqlCacheDependency 特性使這成為了可能。(當(dāng)然,只要我們明白了 ASP.NET 2.0 中的大致實(shí)現(xiàn)方式,我們可以基于 ASP.NET 1.0 把這個(gè)特點(diǎn)實(shí)現(xiàn)出來(lái),后面我總結(jié)了相應(yīng)的方法。)

?

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

?

1、 ? 使數(shù)據(jù)庫(kù)支持 SqlCacheDependency

?

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

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

?

然后我們?cè)偌尤胍粉櫟臄?shù)據(jù)表:“ aspnet_regsqlcache –S 服務(wù)器名稱 –U 登陸 ID –P 密碼 –d 數(shù)據(jù)庫(kù)名稱 –t 要追蹤的數(shù)據(jù)表的名稱 –et ”,這個(gè)命令使指定的 Table 支持 SqlCacheDependency

?

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

?

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

?

它還會(huì)在指定的數(shù)據(jù)庫(kù)中增加幾個(gè)存儲(chǔ)過(guò)程,用來(lái)讓 ASP.NET 引擎查詢追蹤的數(shù)據(jù)表的情況。

?

然后,它會(huì)給我們要追蹤的 Table 加上幾個(gè) Trigger ,分別對(duì)應(yīng)到 Insert Update Delete 操作,這幾個(gè) Trigger 的語(yǔ)句非常簡(jiǎn)單,就是把“ AspNet_SqlCacheTablesForChangeNotification ”表中對(duì)應(yīng)“ tableName ”字段為這個(gè)追蹤的表的名稱的記錄的“ changeId ”字段加上一個(gè) 1

?

ASP.NET 引擎通過(guò)執(zhí)行它加上的存儲(chǔ)過(guò)程“ AspNet_SqlCachePollingStoredProcedure ”,這個(gè)存儲(chǔ)過(guò)程直接返回“ AspNet_SqlCacheTablesForChangeNotification ”表的內(nèi)容,讓 ASP.NET 引擎知道哪個(gè)表的數(shù)據(jù)發(fā)生的變化。默認(rèn)每 500 毫秒執(zhí)行這個(gè)存儲(chǔ)過(guò)程一次,不過(guò)可以在 web.config 里面修改這個(gè)間隔時(shí)間,我的經(jīng)驗(yàn)是這個(gè)查詢操作也是很耗資源的,呵呵。

?

2、 ? web.config 配置

?

web.config 里面的配置再簡(jiǎn)單不過(guò)了

?

<configuration>

?????? <!-- 加上合適的數(shù)據(jù)庫(kù)連接字符串 -->

?????? <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、 ? 在頁(yè)面上的 outputCache 標(biāo)簽中指定 SqlCacheDependency 特性:

?

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

?

只要在這個(gè)追蹤的 Table 上執(zhí)行了 Insert Update Delete 操作,數(shù)據(jù)表上的 Trigger 就會(huì)將數(shù)據(jù)庫(kù)中“ AspNet_SqlCacheTablesForChangeNotification ”表的相應(yīng)記錄的相應(yīng)“ changId ”字段值修改,然后 ASP.NET 引擎就會(huì)通過(guò)獲取新的值來(lái)得知追蹤的 Table 的內(nèi)容發(fā)生了變化,自動(dòng)使這個(gè)頁(yè)面的 cache 失效。

?

后話 1 What about Yukon

?

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

?

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

?

后話 2 、可以在現(xiàn)在的 ASP.NET 上實(shí)現(xiàn)嗎?

?

當(dāng)然可以,我們先按照上面講的第一個(gè)步驟(或者自己定義一套規(guī)則來(lái)實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中對(duì) Table 數(shù)據(jù)變化的追蹤),依照葫蘆畫瓢來(lái)自己添加上這些 Table Trigger 什么的。

?

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

?

后話 3 GolfClubShack 示范程序

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

?

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

?

春節(jié)假期終于完了,這個(gè)春節(jié)沒有回家,留在深圳過(guò)年。今年深圳春節(jié)真冷啊,嗚嗚 家里又沒有寬帶,只能撥號(hào)上網(wǎng),痛苦不堪。從明天開始,又要開始工作了,不知道要幾天才能恢復(fù)春節(jié)顛倒過(guò)來(lái)的生物鐘。

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99久久久久久 | 一级片九九 | 黄色视频a级毛片 | 成人黄色免费视频 | 国产色综合天天综合网 | 免费一看一级毛片 | 亚洲成人福利在线 | 国产亚洲精品久久久久久久久动漫 | 一区二区三区四区在线视频 | 亚洲精品福利你懂 | 亚洲欧美中文日韩综合 | 国产精品怕怕怕视频免费 | 欧美大黄视频 | 国产精品极品美女在线观看免费 | 国产福利不卡 | 久草在线免费新视频 | 亚洲欧美在线观看一区二区 | 国产青青视频 | 国产一区二区三区在线观看免费 | 日韩一二三区 | 免费观看视频www | 五月综合激情婷婷六月色窝 | 国产aⅴ一区二区三区 | 亚洲一区二区免费 | 麻豆精品国产自产在线 | 天天操综合网 | 一个色综合亚洲色综合 | 国产aⅴ| 特级av毛片免费观看 | 91看片淫黄大片在看 | 久在线观看| 免费一级毛片在线播放视频 | 久久99深爱久久99精品 | 久久久久久久久99精品 | 亚洲天天综合网 | 欧美成a人片在线观看久 | 亚洲欧洲精品一区二区 | 9191精品国产免费不久久 | 欧美高清视频一区 | 一区二区三区国产精品 | 很黄很粗很湿很刺激的视频 |