色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

PetShop之ASP.NET緩存設(shè)計(jì)

  PetShop之ASP.NET緩存

  如果對(duì)微型計(jì)算機(jī)硬件系統(tǒng)有足夠的了解,那么我們對(duì)于Cache這個(gè)名詞一定是耳熟能詳?shù)摹T贑PU以及主板的芯片中,都引入了這種名為高速緩沖存儲(chǔ)器(Cache)的技術(shù)。因?yàn)镃ache的存取速度比內(nèi)存快,因而引入Cache能夠有效的解決CPU與內(nèi)存之間的速度不匹配問(wèn)題。硬件系統(tǒng)可以利用Cache存儲(chǔ)CPU訪問(wèn)概率高的那些數(shù)據(jù),當(dāng)CPU需要訪問(wèn)這些數(shù)據(jù)時(shí),可以直接從Cache中讀取,而不必訪問(wèn)存取速度相對(duì)較慢的內(nèi)存,從而提高了CPU的工作效率。軟件設(shè)計(jì)借鑒了硬件設(shè)計(jì)中引入緩存的機(jī)制以改善整個(gè)系統(tǒng)的性能,尤其是對(duì)于一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的Web應(yīng)用程序而言,緩存的利用是不可或缺的,畢竟,數(shù)據(jù)庫(kù)查詢可能是整個(gè)Web站點(diǎn)中調(diào)用最頻繁但同時(shí)又是執(zhí)行最緩慢的操作之一,我們不能被它老邁的雙腿拖緩我們前進(jìn)的征程。緩存機(jī)制正是解決這一缺陷的加速器。

  4.1  ASP.NET緩存概述

  作為.NET框架下開(kāi)發(fā)Web應(yīng)用程序的主打產(chǎn)品,ASP.NET充分考慮了緩存機(jī)制。通過(guò)某種方法,將系統(tǒng)需要的數(shù)據(jù)對(duì)象、Web頁(yè)面存儲(chǔ)在內(nèi)存中,使得Web站點(diǎn)在需要獲取這些數(shù)據(jù)時(shí),不需要經(jīng)過(guò)繁瑣的數(shù)據(jù)庫(kù)連接、查詢和復(fù)雜的邏輯運(yùn)算,就可以“觸手可及”,如“探囊取物”般容易而快速,從而提高整個(gè)Web系統(tǒng)的性能。

  ASP.NET提供了兩種基本的緩存機(jī)制來(lái)提供緩存功能。一種是應(yīng)用程序緩存,它允許開(kāi)發(fā)者將程序生成的數(shù)據(jù)或報(bào)表業(yè)務(wù)對(duì)象放入緩存中。另外一種緩存機(jī)制是頁(yè)輸出緩存,利用它,可以直接獲取存放在緩存中的頁(yè)面,而不需要經(jīng)過(guò)繁雜的對(duì)該頁(yè)面的再次處理。

  應(yīng)用程序緩存其實(shí)現(xiàn)原理說(shuō)來(lái)平淡無(wú)奇,僅僅是通過(guò)ASP.NET管理內(nèi)存中的緩存空間。放入緩存中的應(yīng)用程序數(shù)據(jù)對(duì)象,以鍵/值對(duì)的方式存儲(chǔ),這便于用戶在訪問(wèn)緩存中的數(shù)據(jù)項(xiàng)時(shí),可以根據(jù)key值判斷該項(xiàng)是否存在緩存中。

  放入在緩存中的數(shù)據(jù)對(duì)象其生命周期是受到限制的,即使在整個(gè)應(yīng)用程序的生命周期里,也不能保證該數(shù)據(jù)對(duì)象一直有效。ASP.NET可以對(duì)應(yīng)用程序緩存進(jìn)行管理,例如當(dāng)數(shù)據(jù)項(xiàng)無(wú)效、過(guò)期或內(nèi)存不足時(shí)移除它們。此外,調(diào)用者還可以通過(guò)CacheItemRemovedCallback委托,定義回調(diào)方法使得數(shù)據(jù)項(xiàng)被移除時(shí)能夠通知用戶。

  在.NET Framework中,應(yīng)用程序緩存通過(guò)System.Web.Caching.Cache類實(shí)現(xiàn)。它是一個(gè)密封類,不能被繼承。對(duì)于每一個(gè)應(yīng)用程序域,都要?jiǎng)?chuàng)建一個(gè)Cache類的實(shí)例,其生命周期與應(yīng)用程序域的生命周期保持一致。我們可以利用Add或Insert方法,將數(shù)據(jù)項(xiàng)添加到應(yīng)用程序緩存中,如下所示:

Cache["First"] = "First Item";
Cache.Insert(
"Second", "Second Item");

  4.3 在PetShop 4.0中ASP.NET緩存的實(shí)現(xiàn)

  PetShop作為一個(gè)B2C的寵物網(wǎng)上商店,需要充分考慮訪客的用戶體驗(yàn),如果因?yàn)閿?shù)據(jù)量大而導(dǎo)致Web服務(wù)器的響應(yīng)不及時(shí),頁(yè)面和查詢數(shù)據(jù)遲遲得不到結(jié)果,會(huì)因此而破壞客戶訪問(wèn)網(wǎng)站的心情,在耗盡耐心的等待后,可能會(huì)失去這一部分客戶。無(wú)疑,這是非常糟糕的結(jié)果。因而在對(duì)其進(jìn)行體系架構(gòu)設(shè)計(jì)時(shí),整個(gè)系統(tǒng)的性能就顯得殊為重要。然而,我們不能因噎廢食,因?yàn)閷W⒂谛阅芏雎詳?shù)據(jù)的正確性。在PetShop 3.0版本以及之前的版本,因?yàn)?a href=/itjie/ASPjishu/ target=_blank class=infotextkey>ASP.NET緩存的局限性,這一問(wèn)題并沒(méi)有得到很好的解決。PetShop 4.0則引入了SqlCacheDependency特性,使得系統(tǒng)對(duì)緩存的處理較之以前大為改觀。

  4.3.1  CacheDependency接口

  PetShop 4.0引入了SqlCacheDependency特性,對(duì)Category、Product和Item數(shù)據(jù)表對(duì)應(yīng)的緩存實(shí)施了SQL Cache Invalidation技術(shù)。當(dāng)對(duì)應(yīng)的數(shù)據(jù)表數(shù)據(jù)發(fā)生更改后,該技術(shù)能夠?qū)⑾嚓P(guān)項(xiàng)從緩存中移除。實(shí)現(xiàn)這一技術(shù)的核心是SqlCacheDependency類,它繼承了CacheDependency類。然而為了保證整個(gè)架構(gòu)的可擴(kuò)展性,我們也允許設(shè)計(jì)者建立自定義的CacheDependency類,用以擴(kuò)展緩存依賴。這就有必要為CacheDependency建立抽象接口,并在web.config文件中進(jìn)行配置。

  在PetShop 4.0的命名空間PetShop.ICacheDependency中,定義了名為IPetShopCacheDependency接口,它僅包含了一個(gè)接口方法:

public interface IPetShopCacheDependency
{
AggregateCacheDependency GetDependency();
}

  4.3.4  引入Facade模式

  利用Facade模式可以將一些復(fù)雜的邏輯進(jìn)行包裝,以方便調(diào)用者對(duì)這些復(fù)雜邏輯的調(diào)用。就好像提供一個(gè)統(tǒng)一的門(mén)面一般,將內(nèi)部的子系統(tǒng)封裝起來(lái),統(tǒng)一為一個(gè)高層次的接口。一個(gè)典型的Facade模式示意圖如下所示:

4-4.gif圖4-4 Facade模式

  Facade模式的目的并非要引入一個(gè)新的功能,而是在現(xiàn)有功能的基礎(chǔ)上提供一個(gè)更高層次的抽象,使得調(diào)用者可以直接調(diào)用,而不用關(guān)心內(nèi)部的實(shí)現(xiàn)方式。以CacheDependency工廠為例,我們需要為調(diào)用者提供獲得AggregateCacheDependency對(duì)象的簡(jiǎn)便方法,因而創(chuàng)建了DependencyFacade類:

public static class DependencyFacade
{
private static readonly string path = ConfigurationManager.AppSettings["CacheDependencyAssembly"];
public static AggregateCacheDependency GetCategoryDependency()
{
if (!string.IsNullOrEmpty(path))
return DependencyAccess.CreateCategoryDependency().GetDependency();
else
return null;
}
public static AggregateCacheDependency GetProductDependency()
{
if (!string.IsNullOrEmpty(path))
return DependencyAccess.CreateProductDependency().GetDependency();
else
return null;
}
public static AggregateCacheDependency GetItemDependency()
{
if (!string.IsNullOrEmpty(path))
return DependencyAccess.CreateItemDependency().GetDependency();
else
return null;
}
}

NET技術(shù)PetShop之ASP.NET緩存設(shè)計(jì),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 太谷县| 阿巴嘎旗| 德阳市| 苍梧县| 辽阳市| 霍林郭勒市| 通渭县| 若尔盖县| 襄樊市| 谷城县| 新余市| 云龙县| 富顺县| 桦川县| 班戈县| 高安市| 敦煌市| 睢宁县| 通海县| 霍邱县| 博罗县| 深州市| 周宁县| 永仁县| 桃园市| 互助| 沁水县| 闽清县| 乌拉特前旗| 武定县| 平南县| 溧水县| 菏泽市| 芜湖县| 鹿泉市| 彝良县| 陵川县| 濮阳市| 丹凤县| 托克托县| 瑞丽市|