2011-07-18 44 views
4

我存儲對象中的MemoryCache:如何獲取緩存項目的到期日期?

void foo() 
{ 
    ObjectCache cache = MemoryCache.Default; 
    SomeClass obj = cache["CACHE_KEY"] as SomeClass; 
    if (null == obj) 
    { 
    obj = new SomeClass(); .... 
    CacheItemPolicy policy = new CacheItemPolicy(); 
    //update 
    policy.AbsoluteExpiration = DateTime.Now+TimeSpan.FromMinutes(1); 
    cache.Set("CACHE_KEY", obj, policy); 
    } 
    else 
    { 
    //get expiry date 
    } 
    ..... 
} 

是否有可能獲得有效期不知何故,如果緩存中包含的對象?

+0

爲什麼不創建一個包含對象緩存複合物和它的失效日期? –

+0

@Jeremy McGee:它會工作,但也許有另一種方法可以這麼做......我只是想確保我不會重新發明輪子。 – a1ex07

回答

4

由於您正在設置滑動過期,是不是總是從您訪問它的10分鐘?如果對象爲空,則緩存條目已過期,如果沒有,過期(在上面的代碼中)始終距離您檢查的時間爲10分鐘?

或者您可以將基礎對象(即所有可緩存對象從中繼承)與過期時間一起作爲您添加到緩存時設置的屬性。當您提取對象時,您檢查屬性並且您有到期時間來計算差異。只是一個想法。

+0

糟糕,我的壞 - 它應該是'AbsoluteExpiration',我只是從錯誤的來源粘貼它,+1用於指出它。 – a1ex07

+0

增加了另一個選項給我的答案,不知道這是否會爲你工作。我看到有人爲同樣的效果添加了評論,但我第一次;) –

+0

(第二選項) - 它會工作,但我相信它可以是一個更好的方式來做到這一點(我不確定;也許它是唯一的選擇)。 – a1ex07

2

至於說,保存一旦保存對象,以memeory緩存過期值,

cache.Set(DataKey, DataToStore, policy); 
cache.Set("MemCahceExpiry", DateAndTime.Now.AddHours(6), policy); 

然後從到期鍵讀屆滿:

public static DateTime CheckCachedExpiry() 
{ 
    DateTime MemCacheEXpirayDate = default(DateTime); 
    MemCacheEXpirayDate = Convert.ToDateTime(MemoryCache.Default.Get("MemCahceExpiry")); 
    return MemCacheEXpirayDate; 
} 
相關問題