一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PetShop之ASP.NET緩存設計

  PetShop之ASP.NET緩存

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

  4.1  ASP.NET緩存概述

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

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

  應用程序緩存其實現原理說來平淡無奇,僅僅是通過ASP.NET管理內存中的緩存空間。放入緩存中的應用程序數據對象,以鍵/值對的方式存儲,這便于用戶在訪問緩存中的數據項時,可以根據key值判斷該項是否存在緩存中。

  放入在緩存中的數據對象其生命周期是受到限制的,即使在整個應用程序的生命周期里,也不能保證該數據對象一直有效。ASP.NET可以對應用程序緩存進行管理,例如當數據項無效、過期或內存不足時移除它們。此外,調用者還可以通過CacheItemRemovedCallback委托,定義回調方法使得數據項被移除時能夠通知用戶。

  在.NET Framework中,應用程序緩存通過System.Web.Caching.Cache類實現。它是一個密封類,不能被繼承。對于每一個應用程序域,都要創建一個Cache類的實例,其生命周期與應用程序域的生命周期保持一致。我們可以利用Add或Insert方法,將數據項添加到應用程序緩存中,如下所示:

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

  4.3 在PetShop 4.0中ASP.NET緩存的實現

  PetShop作為一個B2C的寵物網上商店,需要充分考慮訪客的用戶體驗,如果因為數據量大而導致Web服務器的響應不及時,頁面和查詢數據遲遲得不到結果,會因此而破壞客戶訪問網站的心情,在耗盡耐心的等待后,可能會失去這一部分客戶。無疑,這是非常糟糕的結果。因而在對其進行體系架構設計時,整個系統的性能就顯得殊為重要。然而,我們不能因噎廢食,因為專注于性能而忽略數據的正確性。在PetShop 3.0版本以及之前的版本,因為ASP.NET緩存的局限性,這一問題并沒有得到很好的解決。PetShop 4.0則引入了SqlCacheDependency特性,使得系統對緩存的處理較之以前大為改觀。

  4.3.1  CacheDependency接口

  PetShop 4.0引入了SqlCacheDependency特性,對Category、Product和Item數據表對應的緩存實施了SQL Cache Invalidation技術。當對應的數據表數據發生更改后,該技術能夠將相關項從緩存中移除。實現這一技術的核心是SqlCacheDependency類,它繼承了CacheDependency類。然而為了保證整個架構的可擴展性,我們也允許設計者建立自定義的CacheDependency類,用以擴展緩存依賴。這就有必要為CacheDependency建立抽象接口,并在web.config文件中進行配置。

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

public interface IPetShopCacheDependency
{
AggregateCacheDependency GetDependency();
}

  4.3.4  引入Facade模式

  利用Facade模式可以將一些復雜的邏輯進行包裝,以方便調用者對這些復雜邏輯的調用。就好像提供一個統一的門面一般,將內部的子系統封裝起來,統一為一個高層次的接口。一個典型的Facade模式示意圖如下所示:

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

  Facade模式的目的并非要引入一個新的功能,而是在現有功能的基礎上提供一個更高層次的抽象,使得調用者可以直接調用,而不用關心內部的實現方式。以CacheDependency工廠為例,我們需要為調用者提供獲得AggregateCacheDependency對象的簡便方法,因而創建了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技術PetShop之ASP.NET緩存設計,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本国产最新一区二区三区 | 天天狠狠色综合图片区 | 波多野衣结在线精品二区 | 91精品国产综合久久久久久 | 91精品福利在线观看 | 亚洲欧美激情图片 | 亚洲六月丁香婷婷综合 | 国产成人亚洲精品91专区高清 | 视频一区在线观看 | 加勒比色久综合在线 | 韩日美女 | 亚洲欧美在线精品一区二区 | 伊人网综合网 | 青青热在线精品视频免费 | 国产在线一区精品对白麻豆 | 一个人免费播放在线视频看片 | 久久久久中文 | 免费视频精品 | 91高清视频在线观看 | 性夜影院爽黄e爽痛轻点www | 最黄最色视频 | 国产亚洲精品日韩香蕉网 | 国产成人精品高清免费 | 国产亚洲一级精品久久 | 精品9e精品视频在线观看 | 丁香视频在线 | 欧美成人午夜视频 | 欧美人与牲动交xxxxbbbb | 欧美一区二区三区激情啪啪 | 中文字幕一区二区三区不卡 | 日本精品一区二区三区在线视频一 | 欧美第一页草草影院浮力 | 国产夫妻av | 天天干2018 | 国产精品一区二区三区高清在线 | 97影院在线午夜 | 日本韩国一区二区三区 | 激情五月在线 | 欧美xxxx三人交性视频 | 天天做天天玩天天爽天天 | 欧美日韩国产一区三区 |