2011-08-11 34 views
0

我有一個Asp.Net MVC 3網站。以下是調用堆棧存儲過程返回的緩存數據?

Web page/jQuery: $(document).Ready(.... Ajax calls... render the page...) 
=> MVC Control methods 
=> Entity framework 4.1 
=> mapped store procedures (SQL Server 2008) 

問:

  1. 哪裏是最好的地方,實現緩存?
  2. 如何讓頁面知道下劃線SQL服務器表已更新?

回答

0

不知道「最好」的方法,但做到這一點的一種方法是有一個MVC控制器動作,調用數據庫來檢查數據是否已更新。 (您可以通過時間戳完成。)

生成的函數將從緩存或服務器中檢索數據。

http://davidwalsh.name/cache-ajax

唯一有趣的事情但是要注意;您應該確保首先查明是否可以使用緩存內容的調用比根本不緩存內容更快。

0

嘗試儘可能靠近源添加緩存。這樣,更多的應用程序可以從提高的速度中獲益。

如果您控制修改基礎表的代碼,則可以從此處使緩存無效。您也可以在緩存中放置一個短暫的超時時間。如果它使用頻繁的查詢緩存一秒鐘,可能會使速度提高很多倍。確保測試性能增益,以便您可以調整超時。

0

對於問題#2,您可能想要查看Query Notifications。設置一切有點複雜,但是這將使您能夠執行諸如緩存之類的操作,直到數據庫中的數據得到更新。

0

一種方法是在某些指定的時間緩存呈現的視圖。

假設您的網頁沒有經常更新。因此,不必在每次訪問時訪問數據庫,都可以將呈現的視圖存儲在緩存中。這是通過使用OutputCaching - http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs來實現的。

另一種方式可能是存儲數據。

再次您可以將它緩存一段指定的時間。在ASP.NET(MVC)中,可以使用Cache對象 - http://msdn.microsoft.com/en-us/library/aa478965.aspx來實現。 緩存對象讓我們指定將數據放入緩存時要緩存多長時間。例如:

Cache.Insert("key", 
    myTimeSensitiveData, 
    null, 
    DateTime.Now.AddMinutes(1), 
    TimeSpan.Zero); 

或者你可以緩存,直到它被「無效」。

假設你有GetCustomers和UpdateCustomer方法。在GetCustomers中,您檢查數據是否在緩存中。如果沒有,則打到數據庫,放入緩存並返回。它在緩存中,直到有人調用UpdateCustomer。在該方法中,您將修改後的客戶寫入數據庫並使存儲在緩存中的數據無效。你可以刪除它。這樣,當GetCustomers被再次調用時,它將觸發數據庫並再次填充緩存。但請記住,Cache具有全局範圍,並且可以同時訪問多個線程。你將需要一些同步代碼來訪問Cache。