在内存中缓存应用程序数据:MVC Web API

23
我正在编写一个MVC WebAPI,用于返回绑定到下拉框或用作网站上类型前置文本框结果的值,并希望将值缓存到内存中,以便每次命中API时不需要执行数据库请求。
我将使用MemoryCache类,我知道可以在第一次请求时填充缓存,但我不希望对API的第一次请求比其他请求慢。我的问题是:是否有一种方法可以在WebAPI首次启动时自动填充缓存?我看到有一个“App_Start”文件夹,也许我只需在其中添加一些内容?
在初始填充之后,我可能会运行每小时/每天的请求,以根据需要更新缓存。

MemoryCache: http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

更新

Ela在下面的回答中解决了问题,基本上我只需要查看Global.asax的能力即可。 感谢您在这里提供快速帮助,这为我引出了一个关于不同缓存类型的优缺点的单独问题。

不同ASP.NET缓存选项的优缺点

1个回答

24
你可以使用global.asax的application start方法来初始化资源。 这些资源将在整个应用程序中使用。
以下链接应该会帮助你找到更多信息: http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs 提示: 如果你使用进程内缓存(通常是在Web上下文/线程中缓存某些内容),请记住你的Web应用程序是由IIS控制的。 标准的IIS配置将在20分钟内关闭你的Web应用程序,如果没有要服务的用户请求。这意味着,你在内存中的任何资源都将被释放。 此后,下次用户访问你的Web应用程序时,因为IIS重新初始化你的Web应用程序,全局asax、应用程序启动将再次执行。 如果你想要防止这种行为,你可以将应用程序池空闲超时配置为不在20分钟后超时。或者你可以使用不同的缓存策略(持久性缓存、分布式缓存...)。
要配置IIS,请在此处查找更多信息: http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

再次感谢您的回复!我很感激额外提供的信息,如果您有任何其他缓存信息,请随时在我提出的新问题中发布(链接在此处的原始问题中)。我绝对需要考虑IIS工作程序超时。 - vesuvious
或者,您可以设置一个“心跳”服务,每15分钟向您的站点发送一次ping。我使用BinaryCanary.com(免费)来执行此操作,因为我的云托管服务不会将idle_timeout更改为20分钟,除非我升级我的计划。 - ganders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接