2013-09-21 15 views
22

Sto scrivendo un Web API MVC che verrà utilizzato per restituire i valori che verranno associati a caselle a discesa o utilizzati come risultati text-type su un sito Web e voglio memorizzare i valori nella cache in memoria in modo che non sia necessario eseguire richieste di database ogni volta che viene colpita l'API.Memorizzazione nella cache dei dati dell'applicazione in memoria: MVC Web API

ho intenzione di utilizzare la classe MemoryCache e so di poter popolare la cache quando la prima richiesta arriva, ma non voglio che la prima richiesta per l'API per essere più lento rispetto ad altri. La mia domanda è: c'è un modo per me di popolare automaticamente la cache quando si avvia WebAPI per la prima volta? Vedo che c'è una cartella "App_Start", forse mi limito a buttare qualcosa qui dentro?

Dopo la popolazione iniziale, eseguirò probabilmente una richiesta oraria/giornaliera per aggiornare la cache come richiesto.

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

UDPATE

risposta di Ela seguito ha fatto il trucco, in fondo ho solo bisogno di guardare le capacità di Global.asax. Grazie per l'aiuto rapido qui, questo ha sollevato una domanda separata per me circa i pro/contro di diversi tipi di cache.

Pros/Cons of different ASP.NET Caching Options

risposta

22

È possibile utilizzare il metodo di avvio appplication global.asax per inizializzare le risorse. Risorse che verranno utilizzate sostanzialmente a livello di applicazione.

Il seguente collegamento dovrebbe aiutare a trovare ulteriori informazioni: http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs

Suggerimento: Se si utilizza in caching processo (che di solito è il caso se si in cache qualcosa all'interno del web contesto/thread), tenere a ricorda che la tua applicazione web è controllata da IIS. La configurazione IIS standard spegnerà l'applicazione Web dopo 20 minuti se non viene richiesta alcuna richiesta da parte dell'utente. Ciò significa che tutte le risorse che hai in memoria saranno liberate.

Dopo che questo accade, la prossima volta che un utente accede alla tua applicazione web, l'asax globale, l'avvio dell'applicazione verrà nuovamente eseguito, perché IIS reinizializza la tua applicazione web. Se si desidera evitare questo comportamento, configurare il timeout di inattività del pool di applicazioni per non scadere dopo 20 minuti. Oppure usi una strategia cache differente (cache persistente, cache distribuita ...).

Per configurare IIS per questo, qui è possibile trovare ulteriori informazioni: http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

+0

Grazie ancora per la risposta! Apprezzo le informazioni extra, sentitevi liberi di postare ulteriori informazioni sulla memorizzazione nella cache che potreste avere nella nuova domanda che ho posto (link nella mia domanda originale qui). Dovrò assolutamente prendere in considerazione i timeout dell'operatore IIS – vesuvious

+0

Oppure, è possibile impostare un servizio "heartbeat" in cui viene eseguito il ping del sito ogni 15 minuti. Io uso BinaryCanary.com (gratuito) per fare questo perché il mio servizio di hosting cloud non cambierà il tempo di inattività di 20 minuti a meno che non aggiorni il mio piano. – ganders

Problemi correlati