盡管緩存管理在Windows應用程序中已經不再是個問題,但在web環境下依然是個挑戰。因為HTTP是一個無狀態的協議并且web服務無法識別不同請求的用戶。識別不同的請求究竟是哪個特定用戶發出的,并且存儲這些信息以便它在以后請求中能被重新使用,對我們來說非常重要。ASP.NET提供了很多特性用來在客戶端和服務器端存儲這些數據,但是有時我們會對“我們什么時候使用它們(哪個)”感到疑惑。在ASP.NET中,我們會遇到像Session,Application以及Cache這些對象,為了有效地在web應用中有效地使用它們,理解他們之間的不同對我們來說非常重要。
背景
在這篇文章中,我將談到在ASP.NET中不同的緩存管理方法。在web應用中,有時需要在服務端存儲數據以避免從數據庫檢索數據和數據格式化邏輯所需的開銷來提高性能,同時在接下來的請求中我們可以跨用戶、跨應用、跨機器地重用同樣的數據。所以,為了實現這個目的我們需要在服務端緩存數據。
緩存幫我們在3個方面實現了提高服務質量
•性能(Performance)-通過減少檢索數據和格式化操作開銷,緩存提高了應用程序的性能。
•可伸縮性(Scalability)-由于緩存減少了檢索數據和格式化操作的開銷,它降低了服務端的負載,因而提高了應用程序的可伸縮性。
•可用性(Availability)-由于應用程序從緩存中讀取數據,應用程序可以在其它系統或數據庫連接失敗時繼續運行。
不同方法
在web應用中,我們可以在服務端和客戶端緩存數據、頁面等。我們分別來看一下在服務端和客戶端緩存。
服務端緩存管理
ASP.NET Session state
Session用來緩存每個用戶的信息。這意味著這些數據是不能跨用戶共享的,它只限定了創建這個會話(Session)的用戶來使用它。ASP.NET中Session就是用來區分用戶的。
Session能用三種方式來托管:
•進程內(Inproc)-會話狀態存儲在aspnet_wp.exe進程中。當應用程序域回收時Session數據會丟失。
•狀態服務器(StateServer)-會話狀態存儲在不同的進程內,可以在不同的機器上。因為它可以存儲在不同的機器上,所以這個選項支持網站群。
•Sql數據庫(SQLServer)-會話狀態存儲在SqlServer數據庫中,這個選項也支持網站群。
對于狀態服務器和Sql數據庫來說,這兩者都需要對緩存的對象進行序列化,因為要緩存的數據是要緩存到應用程序進程之外的。這兩種方式都會影響性能因為數據檢索與存儲需要話費更多時間相對進程內緩存來說。所以要根據具體需要以確定使用哪種緩存方式。
下面示例代碼展示了如何使用Session
代碼如下:
string empNum = Request.QueryString["empnum"];
新聞熱點
疑難解答
圖片精選