學習MVC之租房網站(十二)-緩存和靜態頁面

NoSQL Memcached Redis 租房 菜鳥程序員成長記 2017-05-22

在上一篇<學習MVC之租房網站(十一)-定時任務和雲存儲>學習了Quartz的使用、發郵件,並將通過UEditor上傳的圖片保存到雲存儲。在項目的最後,再學習優化網站性能的一些技術:緩存和頁面靜態化。

使用緩存可以降低數據庫的壓力,而使用頁面靜態化則可以降低Web服務器的壓力。

一 緩存

ASP.NET下可用的緩存為System.Web.Caching.Cache,保存在服務器內存中,不適用於服務器集群,雖然也用沒用過集群,但現在的主流都使用NoSQL數據庫來做緩存,典型的有Redis和Memcached,這類緩存技術支持集群部署,而且如果使用獨立的服務器,便可不受主服務器宕機的影響,Redis更是支持把數據持久化到硬盤。Redis和Memcached的應用需要專門學習實踐,這兒只是代替普通Cache來掌握基本的使用。

a) Memcached基礎

Memcached最適合的操作系統是Linux,在VS中可以從Nuget安裝EnyimMemcached來使用。首先要讓Memcached運行起來,在生產環境會作為服務運行,在學習階段只是每次使用前啟動控制檯就行了。

需要緩存的對象要被標記為Serializable,而且與該對象關聯的對象也需要標記可序列化。存取方法為:

學習MVC之租房網站(十二)-緩存和靜態頁面

b) Redis基礎

Redis使用Json格式的序列化方式,所以不需要像Memcached那樣標記Serializable,而且Memcached只能在內存保存數據,Redis還可以將數據持久化到硬盤。在學習應用時,也是在使用前啟動其控制檯:

學習MVC之租房網站(十二)-緩存和靜態頁面

使用方式和Memcached類似,首先安裝ServiceStack.Redis,存取代碼為:

學習MVC之租房網站(十二)-緩存和靜態頁面


二 頁面靜態化

緩存可以降低數據庫讀取的壓力,但在網站收到訪問請求後,仍然每次都要跑一遍取得Model、渲染View的過程,而通過將頁面靜態化可以規避這個過程造成的壓力。比如用戶訪問ID為249的房源頁面時,原本是要通過House/Detail/249實時渲染,但現在就可以直接訪問對應的249.html文件,這實際上是將渲染頁面的動作提前到了新增249房源的時刻,在249房源保存到系統時隨即生成其html頁面,以後服務器只需要直接返回這個頁面,運算量大大減少,而且相比以前的實時渲染,靜態頁面只需要渲染一次(不包括修改數據後的重新靜態化)。

新增房源後,渲染靜態化頁面的代碼為:

學習MVC之租房網站(十二)-緩存和靜態頁面

調用方法:string html = MVCHelper.RenderViewToString(this.ControllerContext, @"~/Views/House/StaticIndex.cshtml", model);

除了新增,每次修改房源信息,也要重新生成靜態頁面,以保證信息的同步。

注:

課程內容來自如鵬網(www.rupeng.com),專注於大學生就業的在線教育平臺;

ASP.NET MVC課程 http://www.rupeng.com/News/9/640.shtml

相關推薦

推薦中...