我正在尝试构建一个进程,该进程将重新填充每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分钟重新填充一个项目,而不保留页面实例?注意,我不能使用滑动到期日期,因为内容会发生变化。
答案 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
从那里填充缓存