2008-10-13 72 views
6

我不知道應該使用httpcontext緩存還是企業庫緩存應用程序塊。此外,在刪除或更新作爲緩存列表一部分的實體時,緩存策略的最佳模式是什麼?如何使用linq2sql存儲庫在我的Asp.net Mvc中實現緩存策略?

我應該從緩存中刪除所有列表還是僅從緩存列表中刪除項目? 如果我更新它,我將從緩存中刪除列表或更新其中的實體。

回答

2

有幾種方法來實現緩存,httpcontext是最簡單的方法,但它不一定是最糟糕的。看看memcachedMS Velocity,它們都可以用作ASP.NET緩存的後端。尤其是memcached的聲譽非常好。

至於緩存策略:你必須決定什麼最適合你。我個人會在更新/刪除時從緩存中刪除整個列表,而不是試圖找出實體是否在列表中,因爲它需要一個不小的時間量,並且您需要考慮併發性問題(鎖定列表,因爲有人可能會更新/刪除另一個實體)。 有時候更新一個實體是有意義的(如果你有一個完整的對象包含你需要的所有數據),有時這是浪費時間,因爲由於某種狀態改變,實體應該移動到別的地方(例如,當你對LastChangedDate等)

不要忘了優化你的數據庫代碼,以免刷新刷新列表花費太多時間。

6

在完成了一些測試後,我在代碼的上下文中對緩存應用程序塊進行了全面檢查,併發布了關於它的經驗。它使用起來非常簡單,而且足夠強大以滿足我們的需求。我會推薦它,my results were blogged here

在你的位置,我會使用Repository模式來維護我的緩存,它對數據庫數據集非常適用,並且對於你自己的緩存應該同樣適用。如果你不熟悉存儲庫模式,check out this post from Steven Walther.。然而,我傾向於不同意先前的回答,只拿出需要修改的項目,其餘的未修改。如果您願意,這將允許您從緩存中無條件地過期項目。