Come si memorizzano nella cache i dati che raramente cambiano?

3

Nella mia applicazione ASP.NET ci sono alcuni dati che non cambiano spesso e quindi non c'è motivo di interrogare il database per ricontrollarlo ogni volta.

Nella mia situazione attuale sto controllando le credenziali dell'utente su ogni richiesta per vedere se hanno accesso per ciò che stanno tentando di fare (ad esempio, visualizzare una pagina particolare).

Le informazioni sulla sicurezza sono memorizzate nel database e sto notando un impatto sulle prestazioni su ogni caricamento della pagina. Il tempo di caricamento passa da 20 ms a 200 ms a causa delle query del database.

Mi sembra che dovrei memorizzare nella cache le informazioni relative alla sicurezza in modo che le pagine vengano renderizzate più velocemente (i dati possono essere aggiornati al riavvio dell'applicazione), ma non so come fare. Ho cercato i metodi di memorizzazione nella cache, ma nessuna soluzione che ho visto riguarda ciò che sto cercando di fare.

Un modo è quello di memorizzare le informazioni sulla sicurezza come di sola lettura in una classe statica o repository permanente che viene creata e caricata all'avvio dell'applicazione.

Un altro modo è utilizzare Wrapper di provider di tracciamento e memorizzazione nella cache per Entity Framework , ma secondo una risposta su StackOVerflow chiamata Come rendere la cache di Entity Framework alcuni oggetti che l'utente Alex James dice

sometimes this approach is overkill

C'è qualche svantaggio nella memorizzazione dei dati in alcune variabili di sola lettura (problemi di memoria?) e qualsiasi chiaro vantaggio nell'utilizzo del provider di memorizzazione nella cache?

    
posta Rowan Freeman 02.12.2013 - 04:09
fonte

3 risposte

1

Si desidera memorizzare un riferimento nello stato della sessione ASP.NET.

link

ASP.NET session state enables you to store and retrieve values for a user as the user navigates ASP.NET pages in a Web application.

Effettuate prima la registrazione del database e quindi includete i puntatori sufficienti alla convalida della sicurezza nello stato della sessione. Una data per "l'ultimo controllo di sicurezza" potrebbe essere sufficiente, a seconda di cosa stai facendo.

    
risposta data 02.12.2013 - 05:43
fonte
0

Gli oggetti di sessione o applicazione sono adatti alle tue esigenze. Questi oggetti possono essere caricati nel tuo global.asax

Inseriscili nell'applicazione all'avvio del gestore di eventi:

Sub Application_OnStart
  application("vartime")=""
  application("users")=1
End Sub

Il riavvio della tua applicazione in IIS ricaricherà la tua sessione o le vars delle applicazioni.

    
risposta data 02.12.2013 - 09:06
fonte
0

Il caching dipende dal tipo di informazione, dalla loro volatilità e dalla loro portata. Ci sono dati che non cambiano mai o raramente, dati che cambiano frequentemente e dati che non sono pensati per la cache perché cambiano continuamente. Per memorizzare nella cache tutti questi tipi di informazioni ci sono due modi possibili: memorizzare nella sessione utente (solo per utente singolo) e memorizzare nella cache in stato applicazione (globale a tutti utenti). Il caching con questi metodi può essere eseguito "on-first use" che ottiene i dati sulla prima richiesta e li memorizza per l'uso successivo, o "pro-attivamente" con un singleton su thread diversi che ottiene i dati in parallelo e li memorizza nella cache per qualsiasi chiamante che è sicuramente di grande aiuto per le prestazioni delle applicazioni.

    
risposta data 02.12.2013 - 09:38
fonte

Leggi altre domande sui tag