2013-09-21 71 views
22

我正在編寫一個MVC webAPI,用於返回將綁定到下拉框或用作網站上的預輸入文本框結果的值,並且我想緩存值在內存中,這樣我就不需要每次訪問API時都執行數據庫請求。在內存中緩存應用程序數據:MVC Web API

我打算使用MemoryCache類,我知道我可以在第一個請求進入時填充緩存,但我不希望API的第一個請求比其他緩慢。我的問題是:當WebAPI第一次啓動時,有沒有辦法讓我自動填充緩存?我看到有一個「App_Start」文件夾,也許我只是在這裏扔東西?

在最初的人口數量之後,我可能會運行每小時/每天的請求來根據需要更新緩存。

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

UDPATE

埃拉的回答下面的伎倆,基本上我只需要看看Global.asax中的能力。 感謝您在這裏的快速幫助,這對我來說是一個單獨的問題,關於不同緩存類型的優缺點。

Pros/Cons of different ASP.NET Caching Options

回答

22

您可以使用在Global.asax應用項目啓動方法來初始化資源。 基本上應用範圍廣的資源。

下面的鏈接將幫助你找到更多的信息: http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs

提示: 如果在過程緩存(通常情況下,如果您緩存Web上下文/線程中的東西)使用,請請注意,您的Web應用程序由IIS控制。 如果不需要提供用戶請求,標準IIS配置將在20分鐘後關閉Web應用程序。這意味着,你在內存中擁有的任何資源都將被釋放。

發生這種情況後,下次用戶訪問您的Web應用程序時,全局asax應用程序啓動將再次執行,因爲IIS會重新初始化您的Web應用程序。 如果要防止此行爲,則可以將應用程序池空閒超時配置爲在20分鐘後不超時。或者你使用不同的緩存策略(持久緩存,分佈式緩存......)。再次爲響應 http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

+0

感謝:

要查看這配置IIS,在這裏你可以找到更多的信息!我很欣賞額外的信息,隨時可以發佈任何額外的緩存信息,您可能會在我提出的新問題中(在此處鏈接我的原始問題)。我絕對需要考慮IIS工作超時 – vesuvious

+0

或者,您可以設置一個「心跳」服務,每隔15分鐘對您的網站進行一次ping。我使用BinaryCanary.com(免費)來執行此操作,因爲除非我升級計劃,否則我的雲託管服務不會將idle_timeout從20分鐘改爲遠程。 – ganders

相關問題