Come posso implementare la strategia di memorizzazione nella cache nel mio repository Asp.net Mvc con linq2sql?

StackOverflow https://stackoverflow.com/questions/199138

Domanda

Non so se dovrei usare il caching httpcontext o il blocco dell'applicazione cache della libreria Enterprise. Inoltre, qual è il modello migliore per la strategia di memorizzazione nella cache quando si elimina o si aggiorna un'entità che fa parte di un elenco memorizzato nella cache?

Devo rimuovere tutto un elenco dalla cache o rimuovere solo l'elemento dall'elenco memorizzato nella cache? Se lo aggiorno, rimuoverò l'elenco dalla cache o aggiornerò l'entità in esso.

È stato utile?

Soluzione

Esistono diversi approcci per implementare la memorizzazione nella cache, httpcontext è il più semplice, ma non è necessariamente il peggiore. Dai un'occhiata a memcached o MS Velocity , entrambi i quali possono essere usati come backend per la cache ASP.NET. Soprattutto memcached ha la reputazione di fare davvero un buon lavoro.

Per quanto riguarda la politica di memorizzazione nella cache: devi decidere quale funziona meglio per te. Vorrei rimuovere personalmente l'elenco completo dalla cache al momento dell'aggiornamento / eliminazione anziché cercare di scoprire se l'entità è nell'elenco, poiché richiede un quantità di tempo non banale ed è necessario tenere conto dei problemi di concorrenza (blocco dell'elenco, poiché qualcuno potrebbe eseguire un aggiornamento / eliminazione di un'altra entità). A volte ha senso aggiornare un'entità sul posto (se si dispone di un oggetto completo con tutti i dati necessari), a volte è una perdita di tempo, perché a causa di un cambiamento di stato l'entità dovrebbe spostarsi altrove (ad esempio quando si ordina per LastChangedDate ecc.)

Non dimenticare di ottimizzare troppo il tuo codice DB in modo che non ci voglia troppo tempo per aggiornare l'elenco svuotato.

Altri suggerimenti

Dopo aver eseguito alcuni test con entrambi, ho fatto una revisione completa del blocco dell'applicazione di memorizzazione nella cache nel contesto del nostro codice e ho scritto la mia esperienza con esso. È molto semplice da usare e abbastanza potente per le nostre esigenze. Lo consiglierei, i miei risultati sono stati bloggati qui .

Nella tua posizione utilizzerei il modello Repository per mantenere la mia cache, funziona bene per i set di dati del database e dovrebbe funzionare altrettanto bene per la cache nella tua. Se non hai familiarità con il modello di repository, consulta questo post da Steven Walther. . Tenderei a non essere d'accordo con la risposta precedente, eliminando solo gli elementi necessari per la modifica e lasciando invariato il resto. Ciò ti consentirà di far scadere gli elementi dalla cache indipendentemente dall'intero elenco, se lo desideri.

usa solo [OutputCache (Duration = 10, VaryByParam = " none ")] su ogni azione o controller che desideri memorizzare nella cache.

from http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top