2013-05-30 42 views
2

早上好微軟企業庫 - 緩存機制失效

我想整合緩存機制在我當前的項目,並希望問我最好的做法和問題。

我的web.config的定義如下:

<configSections> 
    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
</configSections> 


<cachingConfiguration defaultCacheManager="SomeName"> 
    <cacheManagers> 
     <add expirationPollFrequencyInSeconds="600" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="Null Storage" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="SomeName" /> 
    </cacheManagers> 
    <backingStores> 
     <add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="Null Storage" /> 
    </backingStores> 
</cachingConfiguration> 

當我加入一些東西到緩存中,我使用下面的代碼:

ICacheManager manager = CacheFactory.GetCacheManager("SomeName"); 
if (manager.GetData(key) != null && IsCacheEnable) 
{ 
    specialChars = (Hashtable)manager.GetData(key); 
} 

else 
{ 
    manager.Add(key, specialChars, CacheItemPriority.Normal, null, new SlidingTime(new TimeSpan(0, 0, CacheExpirySecond))); 
} 

從文檔,我可以看到,通過方法Add(string key, object value)放入緩存的項目不會過期。 不過,我可以看到,該方法Add(string key, object value, CacheItemPriority scavengingPriority, ICacheItemRefreshAction refreshAction, params ICacheItemExpiration[] expirations)定義了一個時間跨度,指定當緩存過期

我的問題是,我們爲什麼要定義在web.config中expirationPollFrequencyInSeconds屬性,當我們需要的時候再定義一個時間跨度使用第二個Add方法在緩存中添加項目?我錯過了什麼嗎? 謝謝

回答

0

糾正我,如果我錯了。

我們在Add()方法中指定的ICacheItemExpiration(在我們的示例中)實際定義了將應用於要添加到緩存的項目的過期策略。在我們的案例中,我們使用了SlidingTime到期政策。假設我們將SlidingTime設置爲10秒。暗示的是,如果物品連續10秒未被訪問,該物品將被標記爲過期。當有多個請求進入該項目時,我們需要保持項目處於活動狀態,這非常有用。作爲一個側面說明,我們還有其他的過期策略,如AbsoluteTimeFileDependencyNeverExpire ...

我們需要了解的是,當一個項目已經過期,但仍然存在於哈希,直到後臺調度刪除項目(取決於後臺調度程序將檢查到期的過期策略)。爲expirationPollFrequencyInSeconds設置值時,我們正在定義背景調度程序執行和分析哈希的時間間隔,以刪除已過期的項目(根據在該項目上定義的過期策略)。