0

我已经获得了我的 ASP.NET Web 应用程序所需的第一批真正海量的数据。到现在为止(实际上是两年!)还没有出现如此昂贵的东西,以至于我不能只在 Page_Load 上执行它或将它存储在 ViewState 或 Session 中。但是现在,我需要一个保持相当静态的对象列表(最多每天更新一次)并包含大约 5000 个对象,并且每次在 Page_Load 上构建它都会导致加载时间受到明显影响。

一些关于缓存的谷歌搜索显示了一些非常基本的例子,使用类似的东西Cache["myStuff"] = myObject;,这一切都很好。但我想知道是否有某种方法可以将我的 Web 应用程序设置为在特定时间运行更新,而不管应用程序是否正在被访问或正在使用。

例如,我希望此过程更新列表,使其每天在凌晨 4:00 运行一次,此时没有人使用任何东西。因此,假设在第 1 天下午,Page_Load 检查以获取缓存的对象,但它返回 null,所以在这种情况下,硬着头皮请求/构建第 1 天剩余时间的列表,将其存储在缓存中. 在第 1 天剩下的时间里,没有人必须构建对象,因为它在缓存中并且仍然有效。

第 1 天结束,现在是第 2 天凌晨 4:00。没有人使用任何页面。我希望从第一天起存储在缓存中的对象被删除并重新构建,这样当人们早上到达办公室时,第一个访问该页面的人不需要构建今天的列表,已经完成了。

我唯一的想法是研究创建一个在 Windows 计划任务或其他东西上运行的控制台应用程序。但即便如此,我也不确定如何从这样的外部应用程序与 ASP.NET Web 应用程序进行交互。

希望我说得通。我想要完成的事情甚至可能吗?

4

3 回答 3

3

If you use a distributed cache like MemCached, you could create a Windows Service or Console application for populating the cache. Since both applications (The service and the web app) will use the same cache, it will solve your problem.

Another solution is to have a page just for that (i.e. /startcache.aspx) that will do the cachin on page_load. And you can schedule a request to that page. You could also hide the page from outside the web-app using some kind of firewall (so nobody accesses that page!). Finally, the good part of this solution is that you can reuse your current code, as it will work in the same project.

Hope it helps.

于 2012-10-31T01:18:24.857 回答
2

Redis is another option for an out of proc 3rd party cache/key value store.

于 2012-10-31T01:20:26.597 回答
0

减少服务器和后端的负载并提供所有日常数据(我从问题中了解到)

为什么不创建一个数据文件(CSV、XML、JSON)并将其作为数据点提供。

从您的问题来看,客户端(应用程序)似乎能够针对该数据集运行自己的查询。

创建这样的文件可以在固定的时间集上完成,保存一次。不需要包括第三方解决方案(除了他们受人尊敬的品质)

于 2012-10-31T01:43:23.167 回答