Panoramica della memorizzazione nella cache in ASP.NET Core

Di Rick Anderson e Kirk Larkin

Memorizzazione nella cache in memoria

La memorizzazione nella cache in memoria usa la memoria del server per archiviare i dati memorizzati nella cache. Questo tipo di memorizzazione nella cache è adatto per un singolo server o più server che usano l'affinità di sessione. L'affinità di sessione è nota anche come sessioni permanenti. L'affinità di sessione indica che le richieste da un client vengono sempre instradate allo stesso server per l'elaborazione.

Per altre informazioni, vedere Cache in memoria in ASP.NET Core e Risolvere i problemi di affinità di sessione del gateway di app Azure.

Cache distribuita

Usare una cache distribuita per archiviare i dati in memoria quando l'app è ospitata in un cloud o in una server farm. La cache viene condivisa tra i server che elaborano le richieste. Un client può inviare una richiesta gestita da qualsiasi server nel gruppo se sono disponibili dati memorizzati nella cache per il client. ASP.NET Core funziona con le cache distribuite di SQL Server, Redis e NCache .

Per altre informazioni, vedere Memorizzazione nella cache distribuita in ASP.NET Core.

Helper per tag di cache

Memorizzare nella cache il contenuto da una visualizzazione MVC o Razor da una pagina con l'helper tag della cache. L'helper tag cache usa la memorizzazione nella cache in memoria per archiviare i dati.

Per altre informazioni, vedere Helper tag cache in ASP.NET Core MVC.

Helper tag di cache distribuita

Memorizzare nella cache il contenuto da una visualizzazione MVC o Razor da una pagina in scenari cloud o web farm distribuiti con l'helper tag cache distribuita. L'helper tag della cache distribuita usa SQL Server, Redis o NCache per archiviare i dati.

Per altre informazioni, vedere Distributed Cache Tag Helper in ASP.NET Core.

Memorizzazione nella cache delle risposte

Middleware di memorizzazione nella cache della risposta:

  • Abilita la memorizzazione nella cache delle risposte del server in base alle intestazioni della cache HTTP. Implementa la semantica di memorizzazione nella cache HTTP standard. Memorizza nella cache le intestazioni della cache HTTP come i proxy.
  • In genere non è utile per le app dell'interfaccia utente, ad Razor esempio Pagine, perché i browser impostano in genere intestazioni di richiesta che impediscono la memorizzazione nella cache. La memorizzazione nella cache di output, disponibile in ASP.NET Core 7.0 e versioni successive, offre vantaggi alle app dell'interfaccia utente. Con la memorizzazione nella cache dell'output, la configurazione decide cosa deve essere memorizzato nella cache indipendentemente da intestazioni HTTP.
  • Può essere utile per le richieste API GET o HEAD pubbliche dai client in cui vengono soddisfatte le condizioni per la memorizzazione nella cache .

Per testare la memorizzazione nella cache delle risposte, usare Fiddler o un altro strumento in grado di impostare in modo esplicito le intestazioni della richiesta. L'impostazione esplicita delle intestazioni è preferibile per il test della memorizzazione nella cache. Per ulteriori informazioni, vedere Risoluzione dei problemi.

Memorizzazione dell'output nella cache

Il middleware di memorizzazione nella cache dell'output consente la memorizzazione nella cache delle risposte HTTP. La memorizzazione nella cache dell'output differisce dalla memorizzazione nella cache delle risposte nei modi seguenti:

  • Il comportamento di memorizzazione nella cache è configurabile nel server.

    Il comportamento di memorizzazione nella cache delle risposte è definito dalle intestazioni HTTP. Ad esempio, quando si visita un sito Web con Chrome o Edge, il browser invia automaticamente un'intestazione Cache-control: max-age=0 . Questa intestazione disabilita efficacemente la memorizzazione nella cache delle risposte, poiché il server segue le istruzioni fornite dal client. Viene restituita una nuova risposta per ogni richiesta, anche se il server ha una risposta aggiornata memorizzata nella cache. Con la memorizzazione nella cache dell'output, il client non esegue l'override del comportamento di memorizzazione nella cache configurato nel server.

  • Il supporto di archiviazione della cache è estendibile.

    La memoria viene usata per impostazione predefinita. La memorizzazione nella cache delle risposte è limitata alla memoria.

  • È possibile invalidare le voci della cache selezionate a livello di codice.

    La dipendenza della memorizzazione nella cache delle risposte nelle intestazioni HTTP lascia poche opzioni per invalidare le voci della cache.

  • Il blocco delle risorse riduce il rischio di cache stampede e fulmine.

    Lo stampede della cache si verifica quando viene revocata una voce della cache usata di frequente e troppe richieste tentano di ripopolare contemporaneamente la stessa voce della cache. Thundering herd è simile: un burst di richieste per la stessa risposta che non è già in una voce della cache. Il blocco delle risorse garantisce che tutte le richieste per una determinata risposta attendino che la prima richiesta popola la cache. La memorizzazione nella cache delle risposte non ha una funzionalità di blocco delle risorse.

  • La riconvalida della cache riduce al minimo l'utilizzo della larghezza di banda.

    La riconvalida della cache indica che il server può restituire un 304 Not Modified codice di stato HTTP anziché un corpo della risposta memorizzato nella cache. Questo codice di stato informa il client che la risposta alla richiesta rimane invariata rispetto a quella ricevuta in precedenza. La memorizzazione nella cache delle risposte non esegue la riconvalida della cache.

Memorizzazione nella cache in memoria

La memorizzazione nella cache in memoria usa la memoria del server per archiviare i dati memorizzati nella cache. Questo tipo di memorizzazione nella cache è adatto per un singolo server o più server che usano l'affinità di sessione. L'affinità di sessione è nota anche come sessioni permanenti. L'affinità di sessione indica che le richieste da un client vengono sempre instradate allo stesso server per l'elaborazione.

Per altre informazioni, vedere Cache in memoria in ASP.NET Core e Risolvere i problemi di affinità di sessione del gateway di app Azure.

Cache distribuita

Usare una cache distribuita per archiviare i dati in memoria quando l'app è ospitata in un cloud o in una server farm. La cache viene condivisa tra i server che elaborano le richieste. Un client può inviare una richiesta gestita da qualsiasi server nel gruppo se sono disponibili dati memorizzati nella cache per il client. ASP.NET Core funziona con le cache distribuite di SQL Server, Redis e NCache .

Per altre informazioni, vedere Memorizzazione nella cache distribuita in ASP.NET Core.

Helper per tag di cache

Memorizzare nella cache il contenuto da una visualizzazione MVC o Razor da una pagina con l'helper tag della cache. L'helper tag cache usa la memorizzazione nella cache in memoria per archiviare i dati.

Per altre informazioni, vedere Helper tag cache in ASP.NET Core MVC.

Helper tag di cache distribuita

Memorizzare nella cache il contenuto da una visualizzazione MVC o Razor da una pagina in scenari cloud o web farm distribuiti con l'helper tag cache distribuita. L'helper tag della cache distribuita usa SQL Server, Redis o NCache per archiviare i dati.

Per altre informazioni, vedere Distributed Cache Tag Helper in ASP.NET Core.

Memorizzazione nella cache delle risposte

Middleware di memorizzazione nella cache della risposta:

  • Abilita la memorizzazione nella cache delle risposte del server in base alle intestazioni della cache HTTP. Implementa la semantica di memorizzazione nella cache HTTP standard. Memorizza nella cache le intestazioni della cache HTTP come i proxy.
  • In genere non è utile per le app dell'interfaccia utente, ad Razor esempio Pagine, perché i browser impostano in genere intestazioni di richiesta che impediscono la memorizzazione nella cache. La memorizzazione nella cache di output, disponibile in ASP.NET Core 7.0 e versioni successive, offre vantaggi alle app dell'interfaccia utente. Con la memorizzazione nella cache dell'output, la configurazione decide cosa deve essere memorizzato nella cache indipendentemente da intestazioni HTTP.
  • Può essere utile per le richieste API GET o HEAD pubbliche dai client in cui vengono soddisfatte le condizioni per la memorizzazione nella cache .

Per testare la memorizzazione nella cache delle risposte, usare Fiddler o un altro strumento in grado di impostare in modo esplicito le intestazioni della richiesta. L'impostazione esplicita delle intestazioni è preferibile per il test della memorizzazione nella cache. Per ulteriori informazioni, vedere Risoluzione dei problemi.

Memorizzazione dell'output nella cache

La memorizzazione nella cache dell'output è disponibile in .NET 7 e versioni successive.