|
|
|
|
|
|||||
|
|||||
| 樓主 ERIC
|
查找了小舖裡關於 Cache 的文章後,發現該主題並沒有很多,而且 CacheDependency 功能也說的不是很完全,小弟我這一個問題實在想不到好方法解決,希望有此經驗的前輩好手們幫個小忙。先貼出程式碼:
以上程式會遇到一個問題,當 Cache 一直維持有效的狀態而遠端資料庫中的資料有所改變(新增/刪除)時,除非手動的去改變 checkChange.txt 的文件理的內容(比如:隨便打幾個字進去,這時 Cache 才會重新 Load 資料庫的資料),否則的話網頁上所顯示的 DB 資料還是舊的。 有什麼方法可以在 Cache 維持有效的狀態下,然後自動偵測資料庫中的資料以被改變了?
本篇文章發表於2008-04-02 08:21
|
||||
| VP、EP、QP、HP該如何使用? | 2010年藍色小舖認證專家風雲榜完全名單 |
| 1樓
不錯的參考
sko
|
Trigger 應該可以作到你要的功能吧 ~
本篇文章回覆於2008-04-03 11:02
|
||||
| 2樓
不錯的參考
puma 版主
![]() ![]() |
你試試在新增資料到資料庫時..順便把cache刪除
Cache.Remove("StockInfo") 這樣你在讀取時又會回到Cache("StockInfo") Is Nothing
本篇文章回覆於2008-04-03 11:33
Blog:F6 Teamhttp://www.dotblogs.com.tw/puma/ |
||||
| 3樓
不錯的參考
效能狂
|
ASP.NET 2.0 的 DataSource 快取與 SqlCacheDependency :
http://blog.xuite.net/j2ee/coder/14521566 SqlCacheDependency (快取相依性),可用來監聽 SQL Server 資料庫,當有任何資料表被修改時,能夠自動移除儲存在伺服器記憶體中的快取,而且還能將修改後的新內容,再重新加入快取中,但此功能「預設」僅限於微軟的 SQL Server 資料庫,包括 7.0、2000、2005 版本皆可套用。 SqlCacheDependency (快取相依性) 功能,在前陣子有一本中譯本「ASP.NET 2.0 網站個人化與自訂控制項」的第 20 章有介紹,該書譯自「Professional ASP.NET 2.0」的後半本: http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchViewAction.do?isbn=9789861813004&sid=39883 第 20 章一開始提到 CacheDependency 類別。您可利用該類別的 instance,把 ASP.NET 網頁中存在快取裡的項目 (例如:DataSet),和一或多個實體檔案 (如:XML 檔案) 建立關聯 (利用該類別 constructor 的參數,傳入字串陣列建立多個關聯)。當任一目錄中的任一 XML 檔案被修改或刪除時,則 DataSet 也會一併從伺服器記憶體裡的快取被刪除掉。此外,藉由 CacheDependency 類別 overloading 的 constructor,您亦可自行傳入 DateTime 當作參數,去和實體檔案的最後修改時間做比對,以讓系統決定是否要從快取中移除 DataSet 等項目。 ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref12/html/T_System_Web_Caching_CacheDependency.htm ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref12/html/O_T_System_Web_Caching_CacheDependency_.ctor.htm 該章接下來還提到 AggregateCacheDependency 類別。該類別類似於 CacheDependency 類別,亦可將 ASP.NET 網頁中存在快取裡的項目 (例如:DataSet),和一或多個來源建立相依性,但主要是用在不同種類的來源,例如來源可同時包含實體的 XML 檔案,以及資料庫中的資料表: ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref12/html/T_System_Web_Caching_AggregateCacheDependency.htm 此外,ASP.NET 2.0 的快取,最大的改變在於 CacheDependency 類別已經被重新改寫,您可讓自己寫的類別去繼承它,自行改寫以加強其快取相依性的功能 (關於該書中提到的這點,似乎 MSDN 也未特別提到)。藉由您自行改寫,可達成以下功能: • 從 Active Directory 中的要求,讓快取失效 (快取被自動刪除) • 從 MSMQ 或 MQSeries 中的要求,讓快取失效 • 從 Web Service 中的要求,讓快取失效 • 建立用於 Oracle 的 CacheDependency • 其他需求 書中還提到,若要在 SQL Server 中啟用 SqlCacheDependency (快取相依性) 功能,必須另行用 aspnet_regsql.exe 工具,手動輸入指令 (搭配相關參數),設定讓某個資料庫中的一或多個資料表,啟用對他們的「快取失效」功能,監聽這些資料表中的內容是否曾經改變。只要執行過該指令,該資料庫中會產生一個新的 AspNet_SqlCacheTablesForChangeNotification 資料表,裡面的每筆記錄都代表您要監聽的某一個資料表;其中有一個 changeId 欄位,其值即供系統決定,使用者對頁面中的請求,是要由伺服器記憶體中目前的快取提供,抑或要至資料庫重新做查詢,如下圖 1 所示:
本篇文章回覆於2008-04-03 13:04
|
||||
| 4樓 |
#2的方式不錯,簡單又可以達到目的.
本篇文章回覆於2008-04-03 13:20
|
||||
| 5樓
作者回應
ERIC
|
非常感謝你們三位的指教,puma 的方法確實是可行的!不過我想可能是我表達得不清楚所以產生一些誤解,我的想法是不應該讓網頁使用者來 renew Cache,而是當今天公司要在資料庫中(不透過網路,是直接在主機上)加入一個新產品,這時候當 Cache 察覺到資料庫中的資料被更動了,而自行 renew Cache。因此我程式第七行加入了一個文件 checkChange.txt,如果此一文件的內容被更動了就要 remove 現有的 Cache 然後從新載入一個新的 Cache,只不過每次公司只要新增或是刪除一個產品,就得手動去更動 checkChange.txt 文件,這樣實在太麻煩了,所以當公司資料庫有所更動時要怎麼去自動更動 checkChange.txt 文件檔呢?
對了!小弟我常去拜訪「效能狂」兄的網站,裡面有許多不錯的文章喔!
本篇文章回覆於2008-04-29 20:27
|
||||
| 6樓
最有價值解答
longer
|
你的問題應該不是出在CacheDependency,而是你的遠端資料庫(A)更新時,無法更新本機(B)的checkChange.txt。
我會建議你哪一部主機(C)去更新遠端資料庫時,順便寫一個文字檔checkChange.txt在該主機(C), 然後B主機藏個IFrame不斷Reload,用WebRequest去讀checkChange.txt。
本篇文章回覆於2008-04-29 21:04
|
| 回覆 |
| 如要回應,請先登入. |
|
![]() |
| 網站導覽| 網站介紹 | 會員權益 | 點數說明 | 加值服務 | 大事紀 | 廣告刊登 |常見問題 | 聯絡我們 |
捨得資訊股份有限公司 版權所有 ©copyright 2004 All Rights Reserved 艾堤數位科技股份有限公司 網站維護、經營管理 | Managed by I-Tea Technology |
|
|