web-dev-qa-db-fra.com

Mise en cache des données d'application en mémoire: MVC Web API

J'écris une MVAP webAPI qui sera utilisée pour renvoyer des valeurs qui seront liées à des zones de liste déroulante ou utilisées comme résultats de zone de texte de saisie anticipée sur un site Web, et je veux mettre en cache des valeurs en mémoire afin de ne pas avoir à effectuer de requêtes de base de données chaque fois que l'API est touchée.

Je vais utiliser la classe MemoryCache et je sais que je peux remplir le cache lorsque la première demande arrive, mais je ne veux pas que la première demande à l'API soit plus lente que les autres. Ma question est: existe-t-il un moyen pour moi de remplir automatiquement le cache au démarrage de WebAPI? Je vois qu'il y a un dossier "App_Start", peut-être que je jette juste quelque chose ici?

Après la population initiale, je vais probablement exécuter une demande horaire/quotidienne pour mettre à jour le cache au besoin.

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

[~ # ~] udpate [~ # ~]

La réponse d'Ela ci-dessous a fait l'affaire, fondamentalement, j'avais juste besoin de regarder les capacités de Global.asax. Merci pour l'aide rapide ici, cela a entraîné une question distincte pour moi sur les avantages/inconvénients des différents types de mise en cache.

Avantages/inconvénients des différentes options de mise en cache ASP.NET

22
vesuvious

Vous pouvez utiliser la méthode de démarrage de l'application globale.asax pour initialiser les ressources. Ressources qui seront utilisées à l'échelle de l'application essentiellement.

Le lien suivant devrait vous aider à trouver plus d'informations: http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs

Astuce: si vous utilisez la mise en cache de processus (ce qui est généralement le cas si vous mettez en cache quelque chose dans le contexte/thread Web), gardez à l'esprit que votre application Web est contrôlée par IIS. La configuration standard IIS fermera votre application Web au bout de 20 minutes si aucune demande utilisateur ne doit être traitée. Cela signifie que toutes les ressources que vous avez en mémoire seront libérées.

Après cela, la prochaine fois qu'un utilisateur accédera à votre application Web, le démarrage global de l'application asax sera à nouveau exécuté, car IIS réinitialise votre application Web. Si vous souhaitez empêcher ce comportement, vous soit configurer le délai d'inactivité du pool d'applications pour ne pas expirer après 20 minutes, soit utiliser une stratégie de cache différente (cache persistant, cache distribué ...).

Pour configurer IIS pour cela, vous pouvez trouver ici plus d'informations: http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

22
MichaC