西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)其它知識(shí) → 緩存的加載策略--Proactive 和Reactive

緩存的加載策略--Proactive 和Reactive

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:本站整理時(shí)間:2010/12/28 0:55:23字體大。A-A+

作者:佚名點(diǎn)擊:33次評(píng)論:3次標(biāo)簽: Proactive Reactive 加載策略

  • 類(lèi)型:加密解密大小:2.7M語(yǔ)言:中文 評(píng)分:7.6
  • 標(biāo)簽:
立即下載
proactive的策略就是一開(kāi)始就將所有backing store中的數(shù)據(jù)加載到進(jìn)程內(nèi)存中,這樣做的好處是在數(shù)據(jù)量相對(duì)不大的時(shí)候會(huì)顯得很有效率,無(wú)需頻繁的訪問(wèn)backing store調(diào)出數(shù)據(jù),并且也不用再代碼中判斷緩存中是否緩存有數(shù)據(jù),是否要從backing store中加載。

reactive策略是“按需加載”,在程序初始化階段僅加載必要的數(shù)據(jù)到內(nèi)存緩存起來(lái),其余數(shù)據(jù)只有在需要時(shí)才從數(shù)據(jù)庫(kù)中調(diào)出再緩存。這種策略比較保守,缺點(diǎn)是在數(shù)據(jù)量比較大且頻繁訪問(wèn)之初由于要多次頻繁的向backing store獲取數(shù)據(jù),但通常我們使用這種的就是這種策略。

下面是兩種方案的示例代碼比較:

proactive的方式
public List<Product> GetProductList()
{
return Respository<Product>.ResolveAll();
}
public void LoadAllProducts(ICacheManager cache)
{
List<Product>list = GetProductList();

for (int i = 0; i < list.Count; i++)
{
Product newProduct = list[i];
cache.Add(newProduct.ProductID, newProduct);
}
}


reactive的方式
public List<Product> GetProductList()
{
return Respository<Product>.ResolveAll();
}
public Product ReadProductByID(ICacheManager cache, string productID)
{
Product newProduct = (Product)cache.GetData(productID);

// Does our cache already have the requested object?
if (newProduct == null)
{
// The requested object is not cached, so retrieve it from
// the data provider and cache it for further requests.
newProduct = this.dataProvider.GetProductByID(productID);

if (newProduct != null)
{
cache.Add(newProductID, newProduct);
}
}
return newProduct;
}

緩存隔離:Partitioned Caches

一個(gè)caching block中CacheManager不能被多個(gè)進(jìn)程或是一個(gè)進(jìn)程的不同應(yīng)用程序域所共享。但多個(gè)進(jìn)程或是同一進(jìn)程的多個(gè)應(yīng)用程序域共享一個(gè)緩存的需求還是很必要的。關(guān)鍵在于如何設(shè)計(jì)合理。

三種情形:

A.Partitioned Caches:每個(gè)進(jìn)程/同一進(jìn)程的不同應(yīng)用程序域使用不同的backing storage。這是最簡(jiǎn)單的情況,也不需要我們進(jìn)行額外的同步處理。每個(gè)進(jìn)程/應(yīng)用程序域你用你的我用我的大家互不干涉。但這無(wú)法是多個(gè)進(jìn)程共享一個(gè)backing storage。比如isolatedstorage作為backing storage,如果是不同用戶會(huì)自動(dòng)分配不同的隔離存儲(chǔ)空間,對(duì)于同一用戶的話只需將partition配置為不同值即可。



B.Shared Partition:n個(gè)進(jìn)程中只有1個(gè)進(jìn)程能夠修改backing storage,所有進(jìn)程都能夠讀取backing storage的數(shù)據(jù)。這種情況是最理想的,但需要邏輯上的支持。

C.Single Writer:n個(gè)進(jìn)程都能夠修改和讀取backing storage,這是最糟糕的情況,很容易產(chǎn)生錯(cuò)亂,會(huì)導(dǎo)致不同步的現(xiàn)象。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(3)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)