【问题标题】:expire cache at specific time在特定时间过期缓存
【发布时间】:2014-02-20 18:12:47
【问题描述】:

我正在使用cache.insert()方法将一些数据添加到缓存中,它使用绝对过期并且每4小时过期一次。 现在我有一个新要求,即在特定时间使缓存过期:上午 7 点、上午 11 点、下午 3 点、晚上 7 点。

有办法吗?

当前代码:

ctx.Cache.Insert("stmodel", stModel, null,
                 DateTime.Now.AddHours(4), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, OnCachedItemRemoved);

提前致谢。

【问题讨论】:

  • 我想你在找Rounding DateTime objects
  • 四舍五入的日期时间将如何帮助满足此要求?
  • 你的问题不是“如何在四舍五入到 4 小时的时间内找到下一个时刻”吗? (同样简单的if 有4个条件可能比那篇帖子DateTime.Now.AddHours(4) < DateTime.Today.AddHours(7) ? DateTime.Today.AddHours(7) : ... 中建议的四舍五入更易读)
  • 只需将 DateTime.Now.AddHours 替换为返回特定时间的方法即可。例如,您可以将其称为 GetNewExpiryTime。如果大于早上 7 点且小于 11 点,则在今天上午 11 点返回,以此类推。

标签: c# caching


【解决方案1】:
ctx.Cache.Insert("stmodel", stModel, null,
             MyClass.getSpecificDateTime(), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, OnCachedItemRemoved);

 public static DateTime getSpecificDateTime()
    {
        TimeSpan currentTime = DateTime.Now.TimeOfDay;
        DateTime newTime = DateTime.Now;

        if (currentTime.Hours < 7){
            newTime = newTime.Date + new TimeSpan(7, 0, 0);
        }else if (currentTime.Hours < 11){
            newTime = newTime.Date + new TimeSpan(11, 0, 0);
        }else if (currentTime.Hours < 15) {
            newTime = newTime.Date + new TimeSpan(15, 0, 0);
        }else if (currentTime.Hours < 19){
            newTime = newTime.Date + new TimeSpan(19, 0, 0);
        }else {
            newTime = DateTime.Now.AddDays(1);
            newTime = newTime.Date + new TimeSpan(7, 0, 0);
        }   

        return newTime;
    }

【讨论】:

  • 感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多