Pet Shop 4 0的快取機制

2021-04-07 09:20:20 字數 1664 閱讀 9622

周一在新員工培訓上為他們做了乙個petshop 4.0的talk,(感謝zou老師給我這麼好的乙個機會,讓我自今還覺得相當incredible,不過也證明了msra裡面,imporsible is nothing)

結果這兩天不停有人跑來問我各種各樣的pet shop問題,還好憑著自己的三腳貓功夫,能夠把大部分人心滿意足地打發走。但是昨天就碰上了乙個問題,讓我一開始也是百思不得其解。那就是pet shop中的快取機制。

首先,pet shop中應用了asp.net 2.0中新增加的sqlcachedependency能力,通過配置檔案的設定,framwork會自動定時輪詢資料庫中的乙個監視表,而被監視表上有 乙個觸發器,在發生insert、update、delete操作的時候就會改變監視表中changeid的值。這樣一來,每當changeid發生了變 化,sqlcachedependency就會自動使得cache失效,那麼下一次請求到達伺服器時,程式將直接從資料庫中提取出最新的資料並重新插入 cache中,於是cache的過期就不必手動編碼操作了!

可是如果你在整個solution裡面搜尋相應的dataproxy類,你會一無所獲!難道這些**只是說放在那裡而已,難道它們也只是為了顯示一下自己的新錘子?

一開始我也百思不得其解,後來看到頁面裡面的**時,猛地恍然大悟。原來pet shop中實現了兩套快取方式,一種是類似於dataproxy的那種傳統方法,將資料實體快取起來,另一種則是結合了asp.net的頁面快取機制來實現的。

檢視productscontrol.ascx檔案你會在頭部發現乙個偽指令宣告:<%@ outputcache duration="100000" varybyparam="page;categoryid" %>第乙個引數是定義了控制項的過期時間,第二個引數則定義了區分快取的引數(2.0新特性),然後檢視 productscontrol.ascx.cs檔案你會發現在protected void pagechanged方法中有productslist.datasource = product.getproductsbycategory(categorykey);語句,這個語句是直接使用dal訪問資料庫,(沒有先查詢緩 存,這也是很多人百思不得其解的地方)但是關鍵不在這裡,在protected void page_load方法中有一行語句this.cachepolicy.dependency = dependencyfacade.getproductdependency();這條語句的作用就在於將sqlcachedependency同樣應 用於頁面的快取過期。

這樣一來,快取的就不光是資料實體類而已,而是整個控制項被render出來後的html!這樣一來還省去了每次訪問頁面時的render操作,效率顯然比光快取實體類高得多!

ps: 如果你想使用光快取實體類的方式,那麼請刪除ascx檔案中的outputcache宣告,注釋掉page_load中的過期策略語句,然後將 productslist.datasource = product.getproductsbycategory(categorykey);改為productslist.datasource = productdataproxy.getproductsbycategory(categorykey);其他頁面同理操作。

結論是petshop實現了兩種快取方式,但是預設它使用了更高效的那種。可惜又讓初學者看不懂了,22個專案,殘念ing...

Pet Shop 4 0的快取機制

首先,pet shop中應用了asp.net 2.0中新增加的sqlcachedependency能力,通過配置檔案的設定,framwork會自動定時輪詢資料庫中的乙個監視表,而被監視表上有 乙個觸發器,在發生insert update delete操作的時候就會改變監視表中changeid的值。這...

PetShop 4 0 安裝問題

1.無法直接啟動帶有 類庫輸出型別 的專案 若要除錯此專案,請在此解決方案中新增乙個引用庫專案的可執行專案。將這個可執行專案設定為啟動項 經查詢處理方法 出錯原因 在同乙個解決方案裡面有多個專案,被設定成啟動專案的是類庫專案,類庫專案是被編譯成dll檔案給別的專案使用的,是不可執行的專案.解決辦法 ...

petshop4 0設計說明

petshop4.0設計說明 一 專案名稱及描述 實現步驟為 4 3 6 5 2 1 1 web 表示層 2 bll 業務邏輯層 3 idal 資料訪問層介面定義 4 model 業務實體 5 dalfactory 資料層的抽象工廠 建立反射 6 sqlserverdal sqlserver資料訪問...