2008-02-18

玩玩asp.net 2.0的caching系列二 - RemoveOutputCacheItem

在asp時代,要作cache通常是用application來存資料,
要完整一點的.就是自己寫個class來操作application控制要cache的資料.

但是在asp.net,頁面要cache變得簡單許多.
只要一行

<%@ OutputCache Duration="60" VaryByParam="None" %>

就可以了,
但是,現在問題又來了,
客戶希望後台新增完後他要立即可以從前台看到更新的資料.
先前在網路上看到是有說只要頁面有修改outputcache就會被清除.
但是...這是在測試時候的方式,
在production環境的頁面應該是不能讓客戶每次更新完就去動一下頁面.
要解決這問題,
可以使用HttpResponse.RemoveOutputCacheItem
用法如下 :

HttpResponse.RemoveOutputCacheItem("/default.aspx");

假設你的default.aspx有設定了outputcache,那你可以新增一個管理cache的頁面.
在那個頁面上有個按鈕,點下後呼叫上面的程式.
而RemoveOutputCacheItem所帶的參數就是你的頁面的絕對路徑(不能使用"../"這種相對路徑).

測試網址:

OutputCache頁面 : http://vip.blueshop.com.tw/ajun/cachetest.aspx
Cache管理頁面 : http://vip.blueshop.com.tw/ajun/cachemanager.aspx

outputCache頁面在上一篇介紹過了,而管理的頁面中有兩個功能,
remove cache才是這次的測試範例.

只要確定網址正確,按下remove cache後,該頁面的outputcache就會被清除,
再次瀏覽outputcache的頁面後就會是被更新後的資料了.

問題到這大致上已經ok了,
但是...還是有點狀況,
因為後台維護的資料是最新消息,
而除了首頁外,還有其他的頁面也都會顯示最新消息,
所以如果要用RemoveOutputCacheItem一筆一筆清除cache似乎有點麻煩,
所以下一篇將會是說明怎麼處理這樣的問題.
ps.範例中有這個的程式碼,如果等不及想要知道解決方案的話,可以直接看code.

範例下載:
http://ajunlee.googlepages.com/CacheTest.rar

張貼留言

Google以後可以查祖譜嗎?

今天看到一篇INDISE的文章 : 比爾蓋茲和賈伯斯,他們的孩子都是 14 歲才能用手機 想說比爾蓋茲不是有點年紀了嗎? 他的小孩應該也都不小了. 他們14歲時應該還沒有甚麼智慧手機吧… 說不定還是在BB call的年代. 所以就好奇的用google查一下有沒...