Share via


Scadenza e rimozione in Cache nel ruolo di Azure

Importante

Microsoft consiglia tutti i nuovi sviluppi di usare Cache Redis di Azure. Per la documentazione e le indicazioni correnti sulla scelta di un'offerta di Cache di Azure, vedere Quale offerta di Cache di Azure è adatta per l'utente?

Microsoft Azure cache non conserva in modo permanente gli oggetti memorizzati nella cache. Oltre a essere rimosso in modo esplicito dalla cache tramite il metodo Remove , gli oggetti memorizzati nella cache possono anche scadere o essere rimossi dal cluster della cache.

Scadenza

La scadenza della cache consente al cluster di cache di rimuovere automaticamente gli oggetti dalla cache. Quando si usa il metodo Put o Add, è possibile impostare un valore di timeout facoltativo per lo specifico oggetto della cache. Questo valore determinerà il tempo di permanenza nella cache. Se il valore di timeout dell'oggetto non viene fornito al momento della memorizzazione nella cache, l'oggetto usa la scadenza predefinita,

Quando si usa la memorizzazione nella cache basata sui ruoli, sono disponibili tre opzioni per la scadenza:

Tipo di scadenza Descrizione

Nessuno

La scadenza è disabilitata. Gli elementi rimangono nella cache finché non vengono rimossi o il cluster di cache viene riavviato.

Assoluto

Gli elementi scadono entro un determinato periodo di tempo dalla creazione.

Estendibile

Gli elementi scadono entro un determinato periodo di tempo dall'ultimo accesso. Ogni volta che si esegue l'accesso all'oggetto, la finestra temporale scorrevole viene reimpostata. In questo modo, gli elementi usati di frequente rimangono nella cache più a lungo.

Nota

È importante notare il comportamento di una scadenza Estendibile quando viene usata in combinazione con la cache locale. Se un elemento viene letto dalla cache locale, l'accesso all'oggetto nel cluster di cache non viene eseguito ed è quindi possibile che l'elemento risulti scaduto nel server anche se viene letto in locale.

In Memorizzazione nella cache condivisa la scadenza è sempre Assoluta e non è possibile impostare una scadenza predefinita. Gli elementi in Memorizzazione nella cache condivisa scadono dopo 48 ore. Tuttavia, è possibile usare i metodi Put e Add per impostare le ore di scadenza esplicite nel codice. Tenere presente che i provider ASP.NET usano automaticamente questi overload per fornire timeout espliciti per la memorizzazione nella cache dello stato della sessione e dell'output. In entrambi i casi, quando le dimensioni della cache superano i limiti dell'offerta di Memorizzazione nella cache condivisa, gli elementi usati meno di recente nella cache vengono rimossi.

Se gli oggetti memorizzati nella cache vengono bloccati per la concorrenza, non verranno rimossi dalla cache anche se è stata superata la scadenza. Nel caso in cui siano scaduti, verranno rimossi dalla cache subito dopo essere stati sbloccati.

Per impedire la rimozione istantanea quando si sbloccano oggetti che nel frattempo sono scaduti, il metodo Unlock supporta anche l'estensione della scadenza dell'oggetto memorizzato nella cache.

Invalidamento della cache locale

Esistono due tipi complementari di invalidazione per la cache locale: invalidazione basata sul timeout e invalidazione basata su notifica.

Suggerimento

Una volta archiviati gli oggetti nella cache locale, l'applicazione continua a usarli fino a quando non vengono invalidati, indipendentemente dal fatto che vengano aggiornati da un altro client nel cluster di cache. Per questo motivo, è opportuno abilitare la cache locale per i dati che non vengono modificati frequentemente.

Invalidamento basato sul timeout

Una volta che gli oggetti vengono scaricati nella cache locale, vi restano fino a quando non raggiungono il valore di timeout specifico indicato nelle impostazioni di configurazione del client della cache. Quando questo valore viene raggiunto, gli oggetti vengono invalidati. L'oggetto potrà essere aggiornato dal cluster di cache quando verrà richiesto la volta successiva.

Invalidamento basato sulla notifica

Se nel client della cache è abilitata la cache locale, è inoltre possibile usare le notifiche della cache per invalidare automaticamente gli oggetti memorizzati localmente nella cache. Se si riduce la durata di questi oggetti in base alle esigenze, è possibile evitare il rischio che l'applicazione usi dati obsoleti.

Nota

Le notifiche non sono supportate in Memorizzazione nella cache condivisa.

Quando si usano le notifiche della cache, l'applicazione effettua un controllo nel cluster di cache a intervalli regolari per verificare se sono disponibili nuove notifiche. Tale intervallo, definito intervallo di polling, corrisponde a 300 secondi per impostazione predefinita. L'intervallo di polling viene specificato in unità di secondi nelle impostazioni di configurazione dell'applicazione. Si noti che anche con l'invalidamento basato sulla notifica, i timeout continuano a essere applicati agli elementi della cache locale. Ciò rende l'invalidamento basato sulla notifica complementare a quello basato sul timeout.

Per altre informazioni ed esempi, vedere Cache locale in Cache In-Role di Azure.

Rimozione

Per mantenere la capacità di memoria disponibile per la cache di ciascun host della cache, è supportata la rimozione degli elementi utilizzati meno di recente. Per garantire una distribuzione uniforme della memoria tra tutti gli host della cache nel cluster vengono usate soglie Questa soglia è determinata da due fattori: la quantità di memoria fisica disponibile in ogni computer e la percentuale di memorizzazione nella cache riservata in ogni computer.

Quando l'utilizzo della memoria supera il valore specificato dalla soglia, gli oggetti vengono rimossi dalla memoria, indipendentemente dalla scadenza, finché le richieste di memoria non diminuiscono. Gli oggetti memorizzati successivamente nella cache possono essere reindirizzati ad altri computer nel cluster di cache per mantenere una distribuzione ottimale della memoria.

Avviso

Se si disabilita la rimozione, può verificarsi un problema di limitazione delle richieste. In questo caso, la memoria supera la soglia, ma non è possibile risolvere il problema di memoria insufficiente. Se i client tentano di aggiungere elementi alla cache in questo scenario, viene generata un'eccezione finché il problema non viene risolto. Si noti che Memorizzazione nella cache condivisa non supporta la disabilitazione della rimozione in una cache.

Specifica delle impostazioni di scadenza e rimozione

Il comportamento relativo alla scadenza e alla rimozione viene configurato nelle impostazioni di configurazione del cluster a livello di cache denominata.

I seguenti metodi consentono di ignorare le impostazioni predefinite presenti nella cache:

  • I metodi Add e Put forniscono overload che consentono di specificare un valore di timeout di scadenza solo per l'oggetto aggiunto alla cache.

  • I metodi PutAndUnlock e Unlock forniscono overload che consentono di estendere la scadenza di un oggetto dopo averlo sbloccato.

  • Il metodo ResetObjectTimeout consente di estendere in modo esplicito la durata di un oggetto, ignorando le impostazioni di scadenza della cache.

Indipendentemente dalle impostazioni di scadenza o rimozione, se un cluster di cache viene riavviato, tutti gli oggetti della cache vengono cancellati. Se nella cache non vengono trovati dati, il codice dell'applicazione dovrà ricaricare la cache da un'origine dati. Tale operazione viene spesso definita modello di programmazione cache-aside.

Vedere anche

Concetti

Funzionalità di Cache nel ruolo in Cache di Azure