有時候總聽到網友說**執行好慢,不知如何是好;有時候也總見到一些朋友寫的**功能看起來非常好,但訪問效能卻極其的差。沒有「勤儉節約」的意識,勢必會造成「鋪張浪費」。如何應對這種情況,充分利用系統快取則是首要之道。
系統快取有什麼好處呢?舉個簡單的例子,你想通過網頁查詢某些資料,而這些資料並非實時變化,或者變化的時間是有期限的。例如查詢一些歷史資料。那麼每個使用者每次查的資料都是一樣的。如果不設定快取,asp.net也會根據每個使用者的請求重複查詢n次,這就增加了不必要的開銷。所以,
可能的情況下盡量使用快取,從記憶體中返回資料的速度始終比去資料庫查的速度快,因而可以大大提**用程式的效能。畢竟現在記憶體非常便宜,用空間換取時間效率應該是非常划算的。尤其是對耗時比較長的、需要建立網路鏈結的資料庫查詢操作等。
快取功能是大型**設計乙個很重要的部分。
由資料庫驅動的web應用程式,如果需要改善其效能,最好的方法是使用快取功能。
15.4.1
快取的分類
系統快取全解析文章索引
從分布上來看,我們可以概括為客戶端快取和伺服器端快取。如圖15-1所示:
圖15-
1快取的分類
客戶端快取
伺服器端快取——有些東西沒法或是不宜在客戶端快取,那麼我們只好在伺服器端想想辦法了。伺服器端快取從性質上看,又可以分為兩種。
(1)
靜態檔案快取
好多頁面是靜態的,很少改動,那麼這種檔案最適於作靜態快取。現在的iis 6.0這部分內容是直接存放在kernel的記憶體中,由http.sys直接管理。由於它在kernel space,所以它的效能非常的高。使用者的請求如果在快取裡面,那麼http.sys直接將內容傳送到network driver上去,不需要像以前那樣從iis的user space的記憶體copy到kernel中,然後再傳送到tcp/ip stack上。kernel level cache幾乎是現在高效能web server的乙個必不可少的特性。
(2)
動態快取
動態快取是比較有難度的。因為你在快取的時候要時刻注意乙個問題,那就是快取的內容是不是已經過時了。因為內容過時了可能會有很嚴重的後果。比如網上買賣**的**。你給別人提供的**是過時的,那人家非砍了你不可。快取如何發現自己是不是過時就是乙個非常複雜的問題。
在asp.net中,常見的動態快取主要有以下幾種手段:
ø傳統快取方式 ø
頁面輸出快取。
ø頁面區域性快取。 ø
利用.net提供的system.web.caching 快取。 ø
快取依賴。
15.4.2
傳統快取方式
(選自《亮劍.net:.net深入體驗與實戰精要》第15
章)
系統快取全解析
載 有時候總聽到說 執行好慢,不知如何是好 有時候也總見到一些朋友寫的 功能看起來非常好,但訪問效能卻極其的差。沒有 勤儉節約 的意識,勢必會造成 鋪張浪費 如何應對這種情況,充分利用系統快取則是首要之道。系統快取有什麼好處呢?舉個簡單的例子,你想通過網頁查詢某些資料,而這些資料並非實時變化,或者變...
系統快取全解析1
有時候總聽到說 執行好慢,不知如何是好 有時候也總見到一些朋友寫的 功能看起來非常好,但訪問效能卻極其的差。沒有 勤儉節約 的意識,勢必會造成 鋪張浪費 如何應對這種情況,充分利用系統快取則是首要之道。系統快取有什麼好處呢?舉個簡單的例子,你想通過網頁查詢某些資料,而這些資料並非實時變化,或者變化的...
系統快取全解析(五) 資料庫快取依賴
更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的快取還是顯得特別重要,上面幾種方式都可以實現部分資料快取功能。但問題是我們的資料有時候是在變化的,這樣使用者可能在快取期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從快取中取資料,...