天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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)存之間的速度不匹配問題。硬件系統(tǒng)可以利用Cache存儲(chǔ)CPU訪問概率高的那些數(shù)據(jù),當(dāng)CPU需要訪問這些數(shù)據(jù)時(shí),可以直接從Cache中讀取,而不必訪問存取速度相對(duì)較慢的內(nèi)存,從而提高了CPU的工作效率。軟件設(shè)計(jì)借鑒了硬件設(shè)計(jì)中引入緩存的機(jī)制以改善整個(gè)系統(tǒng)的性能,尤其是對(duì)于一個(gè)數(shù)據(jù)庫驅(qū)動(dòng)的Web應(yīng)用程序而言,緩存的利用是不可或缺的,畢竟,數(shù)據(jù)庫查詢可能是整個(gè)Web站點(diǎn)中調(diào)用最頻繁但同時(shí)又是執(zhí)行最緩慢的操作之一,我們不能被它老邁的雙腿拖緩我們前進(jìn)的征程。緩存機(jī)制正是解決這一缺陷的加速器。

  4.1  ASP.NET緩存概述

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

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

  應(yīng)用程序緩存其實(shí)現(xiàn)原理說來平淡無奇,僅僅是通過ASP.NET管理內(nèi)存中的緩存空間。放入緩存中的應(yīng)用程序數(shù)據(jù)對(duì)象,以鍵/值對(duì)的方式存儲(chǔ),這便于用戶在訪問緩存中的數(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)無效、過期或內(nèi)存不足時(shí)移除它們。此外,調(diào)用者還可以通過CacheItemRemovedCallback委托,定義回調(diào)方法使得數(shù)據(jù)項(xiàng)被移除時(shí)能夠通知用戶。

  在.NET Framework中,應(yīng)用程序緩存通過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í),頁面和查詢數(shù)據(jù)遲遲得不到結(jié)果,會(huì)因此而破壞客戶訪問網(wǎng)站的心情,在耗盡耐心的等待后,可能會(huì)失去這一部分客戶。無疑,這是非常糟糕的結(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緩存的局限性,這一問題并沒有得到很好的解決。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)一的門面一般,將內(nèi)部的子系統(tǒng)封裝起來,統(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)載需保留來源!

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

主站蜘蛛池模板: 末成年美女黄网站色大片连接 | 老师洗澡让我吃她胸的视频 | 欧美日韩永久久一区二区三区 | 欧美亚洲国产手机在线有码 | 久久超碰国产精品最新 | 日韩一区二区在线免费观看 | 王小军怎么了最新消息 | 青青青青久久久久国产的 | 最好看中文字幕国语 | 女人久久WWW免费人成看片 | 欧美18videosex性欧美老师 | 亚洲 欧美 国产 伦 综合 | 色婷婷五月综合久久中文字幕 | 国产精品乱人无码伦AV在线A | 牢记永久免费网址 | 不分昼夜H1V3 | 在线观看视频亚洲 | 在线中文高清资源免费观看 | 风月宝鉴之淫乱英雄传 电影 | 快播理伦片| 视频区 国产 欧美 日韩 | 亚洲中久无码永久在线 | 久久综合色悠悠 | 伊人久久中文大香线蕉综合 | 中文字幕不卡免费高清视频 | 久久天天综合 | 久久国产精品人妻中文 | 国精产品一区一区三区有 | 男人吃奶摸下挵进去啪啪 | 丝瓜影院观看免费高清国际观察 | 久久香蕉国产线看观看首页 | 日韩精品一卡二卡三卡四卡2021 | 国产69精品久久久久APP下载 | 国产精品成人不卡在线观看 | 亚洲中文 字幕 国产 综合 | 把极品白丝班长啪到腿软 | 久久国产欧美日韩精品免费 | 2017年伦理片免费观看 | 精品久久香蕉国产线看观看麻豆 | 亚洲 欧美 制服 校园 动漫 | 国产综合无码一区二区色蜜蜜 |