7

所以我有一个在午夜运行的进程,它为 flash 对象设置起点和终点。这只需要每天运行一次,所以我显然在缓存结果集。

但是,我遇到的问题是,如果数据在 midnite 之后仍然被缓存,那么它不会提取最正确的数据,直到缓存过期。

我基本上需要缓存在晚上 11:59:59 过期,以便在上午 12:00 获得正确的数据。

我猜想我从中提取数据的表上的 SQL Cache Dependency 是理想的,但是我以前从未设置过。

有没有办法告诉缓存在午夜删除特定项目?

多谢你们!

--绝对到期--

我想我明白了:

DateTime expireWeights = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59, 999);
Cache.Insert("CacheItemName", itemToCache, null, expireWeights, System.Web.Caching.Cache.NoSlidingExpiration);
4

3 回答 3

5

您可以在 Cache 对象上设置 absoluteExpiration 时间,即 DateTime。

您还可以将 absoluteExpiration 与 SqlCacheDependency 结合使用。

关于缓存过期不拉取新数据的问题:可以连接一个 CacheItemRemovedCallback 来接收过期通知,到时候刷新缓存。

于 2009-12-08T16:01:43.763 回答
3

我不明白为什么你有绝对到期的问题?您可以指示该项目将从缓存中过期的确切日期时间。因此,下面这行代码会将“myObject”插入到“MyKey”键下的缓存中,并在第二天的午夜过期(无论何时进入缓存)。

Cache.Insert("MyKey", myObject, null, DateTime.Today.AddDays(1), TimeSpan.Zero);
于 2009-12-08T16:10:28.960 回答
1

如果你看这里,在“基于时间的依赖”下,它显示了如何将项目设置为在特定时间过期。那是你要找的吗?

于 2009-12-08T15:54:09.597 回答