2013-02-04 85 views
0

我希望緩存元素中的項目應該在特定時間每天下午11:59:59被刪除一次。
我知道在緩存中有一個屬性absoluteExpiration,可以在一段時間內使用。
我使用下面的代碼來設置緩存如何在特定時間每天刪除緩存項目

public static Collection<CProductMakesProps> GetCachedSmartPhoneMake(HttpContext context) 
    { 
     var allMake = context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>; 
     if (allMake == null) 
     { 
      allMake = new CModelRestrictionLogic().GetTopMakes(); 
      context.Cache.Insert("SmartPhoneMake", allMake, null, 
      DateTime.Now.AddHours(Int32.Parse(ConfigurationManager.AppSettings["MakeCacheTime"])), 
      Cache.NoSlidingExpiration); 
     } 
     return allMake; 
    } 

值,但我怎麼能設置的確切時間時,高速緩存應該過期。
我是否需要manipulate時間變量並計算出time difference並設置了absoluteExpiration或者有其他方法。

+0

計算時間差並設置absoluteexpiration – user2031802

回答

0

我發現我已經創建了一個功能,如下

private static double GetTimeLeft() 
    { 
     //create a time stamp for tomorow 00:10 hours 
     var tomorrow0010Minute = DateTime.Now.AddDays(1).Date.AddMinutes(10); 
     return Math.Round((tomorrow0010Minute - DateTime.Now).TotalHours); 
    } 

這給了我,我在我的函數中使用雙重價值的方式如下

public static Collection<CProductMakesProps> GetCachedSmartPhoneMake(HttpContext context) 
{ 
    var allMake = context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>; 
    if (allMake == null) 
    { 
     allMake = new CModelRestrictionLogic().GetTopMakes(); 
     context.Cache.Insert("SmartPhoneMake", allMake, null, 
     DateTime.Now.AddHours(GetTimeLeft()), 
     Cache.NoSlidingExpiration); 
    } 
    return allMake; 
} 

,做:)

0

請檢查在SO這個答案。它使用ASP.NET計時器控件在一天中的特定時間引發事件。我建議你保持這個值作爲配置條目。此外還有其他建議。

How to use the .NET Timer class to trigger an event at a specific time?

+0

其實我的建議使用absoluteExpiration只有 –

+0

感謝您的答案。但它會幫助我。 –

+0

是的計時器事件只是無效/刷新/重新加載/刪除緩存。 –

相關問題