使用新数据每30分钟填充一次缓存

时间:2010-09-13 15:45:24

标签: asp.net caching

我正在尝试构建一个进程,该进程将重新填充每30分钟插入缓存的项目。我将项目插入缓存中,30分钟后过期。我设置了一个委托(http://msdn.microsoft.com/en-us/library/system.web.caching.cacheitemremovedcallback(v=VS.90).aspx)在缓存项目到期时被调用。我的目标是调用委托时重建项目并将其重新插入缓存中。

我在上面的MSDN文章中发现的问题是,在调用委托之前,它正在使用保持页面实例打开。而不是让它调用另一个静态的类(vb共享)。这导致了一个不同的问题 - 委托丢失了上下文。当我尝试添加回缓存时,HttpContext.Current为null。

有没有办法在ASP.NET中每隔30分钟重新填充一个项目,而不保留页面实例?注意,我不能使用滑动到期日期,因为内容会发生变化。

1 个答案:

答案 0 :(得分:1)

首先,您知道只要在 30分钟过期后有新请求,您就可以重新填充缓存。我的意思是,如果您没有需要该数据的请求,为什么还要放入缓存。

其次,我们前一段时间有类似的需求,无论如何......基本的想法是:

1.保持对App缓存的引用,以便我们可以从异步线程

访问它
    public static System.Web.Caching.Cache BackgroundCache;    
    public static System.Web.HttpServerUtility BackgroundServer;

然后在Global.asax的Application_Start

中分配它们
 BackgroundCache = System.Web.HttpContext.Current.Cache;
 BackgroundServer = System.Web.HttpContext.Current.Server;

2.在Application_Start上启动一个Timer,它将每隔30分钟在一个异步线程上运行。

3.使用BackgroundCache和BackgroundServer

从那里填充缓存