如何在每天的特定时间删除缓存项目

时间:2013-02-04 06:35:39

标签: asp.net c#-4.0 asp.net-caching

我希望缓存元素中的项目应该在特定时间每天删除一次,比如在晚上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或其他方式。

2 个答案:

答案 0 :(得分:0)

请在SO中查看此答案。它使用ASP.NET计时器控件在一天中的特定时间引发事件。我建议你把这个值保存为配置条目。此外,还有其他建议。

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

答案 1 :(得分: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;
} 

完成了:)