Data cache vs object di sessione in ASP.Net

Gli oggetti di business dinamici per un sito devono essere archiviati nella sessione degli utenti o utilizzare il caching di ASP.Net (oggetti come ordini, informazioni sul profilo, ecc.)?

Ho lavorato con siti che utilizzavano sessioni per archiviare oggetti business, ma mi chiedevo … Quali sono i vantaggi o gli svantaggi del caching?

Se gli oggetti sono condivisibili tra le sessioni utente, utilizzare la cache. Se gli oggetti sono unici per ogni sessione, forse perché sono governati da autorizzazioni, quindi archiviarli nella sessione. La sessione in-process è memorizzata nella cache, quindi il fattore decisivo dovrebbe essere l’ambito dei dati.

Il caching è proprio questo: il caching. Non si può mai fare affidamento su voci presenti, quindi non si devono fare ipotesi al riguardo: prepararsi a passare direttamente al DB (o altrove) per recuperare i dati.

La sessione, d’altra parte, è più adatta alla memorizzazione di oggetti, anche se personalmente cerco di evitare il session store a favore di un DB. Solitamente lo faccio estorcendo il negozio dietro un’interfaccia opaca ISessionStoreService :

interface ISessionStore { T GetEntry(string key); void SaveEntry(string key, T entry); } 

e quindi l’implementazione appropriata di “dipendenza dall’iniettare”, sia InmemorySessionStore , DbSessionStore o qualsiasi altra cosa.

La cache di sistema ASP.NET è globale per l’applicazione dove la sessione è unica per l’utente corrente. Se si è scelto di utilizzare la cache globale per archiviare gli oggetti, è necessario creare una strategia di identificazione degli oggetti in modo da poter ottenere gli oggetti corretti per ogni utente.

Se stai cercando di migliorare le prestazioni, sarebbe meglio sostituire lo stato della sessione ASP.NET con una cache di memoria distribuita come la velocità di Microsoft. Microsoft ha pubblicato articoli su come sostituire l’utilizzo della sessione con Velocity. È inoltre ansible utilizzare Memcache o altri prodotti simili in modo correlato.

Gli oggetti di sessione sono adatti per i dati di solo utente, d’altra parte, gli oggetti di cache sono più adatti per i dati condivisi per l’applicazione.
La chiave per salvare in uno o nell’altro è determinare se ciò che si sta tentando di archiviare saranno dati di solo utente o che devono essere condivisi in tutte le applicazioni.

Sessione => Una pagina web con un’interfaccia passo passo (un test online ad esempio).
Cache => Le informazioni visualizzate in un qualche tipo di widget meteo (come quello che ha Google nella sua pagina igoogle.com).
Spero che questo ti aiuti.

Sebbene sia ansible memorizzare il proprio object business in Cache, ma Cache è progettato per il miglioramento delle prestazioni e non per la gestione dello stato. Immagina di avere un processo per ottenere 1000 record dal database (e ci vogliono circa 3 secondi) e ne avrai bisogno per alcuni minuti. È ansible memorizzare gli oggetti in cache e impostare la data di scadenza, la priorità e la dipendenza (come SqlDependency o FileDependency), quindi per le richieste successive è ansible utilizzare i dati memorizzati nella cache anziché recuperarli dal database. È ansible memorizzare l’object in Session ma non è ansible impostare la dipendenza per Session per impostazione predefinita. Anche Cache ha un comportamento unico che quando il sistema ha bisogno di memoria rilascia gli oggetti dalla cache a seconda della sua priorità. Gli oggetti cache sono globali per l’applicazione e condivisi tra tutti gli utenti, ma Session non è condivisa ed è utilizzabile per ogni utente (Session).