Utilizzo dell'API IDistributedCache
La configurazione della cache distribuita è specifica dell'implementazione. Qui descriviamo come configurare NCache come cache distribuita implementando IDistributedCache API.
Prerequisiti per l'utilizzo dell'API IDistributedCache
- Installa i pacchetti NuGet seguenti nell'applicazione in base al tuo NCache Versione:
- Enterprise: NCache.Microsoft.Estensioni.Memorizzazione nella cache
- Saloni professionali: NCache.Microsoft.Extensions.Caching.Professional
- La cache deve essere in esecuzione.
- L'applicazione deve essere connesso alla cache prima di eseguire l'operazione.
- Per i dettagli dell'API, fare riferimento a: ProvaGetValue, Impostato, AggiungiNCachecache distribuita.
- Assicurati che i dati aggiunti lo siano serializzabile.
- Per garantire che l'operazione sia a prova di errore, si consiglia di gestire eventuali potenziali eccezioni all'interno dell'applicazione, come spiegato in Gestione dei guasti.
- Per gestire eventuali eccezioni invisibili, fare riferimento a Troubleshooting .
utilizzando NCache Caching distribuito
Per utilizzare NCache tramite la IDistributedCache
API, devi aggiungere le configurazioni della cache nel file Appsettings.json della tua domanda. L'esempio seguente aggiunge una sezione NCacheSettings
che configura il nome della cache. Puoi cambiare il nome in base alla tua cache registrata.
Consigli
Assicurati che la cache specificata sia in esecuzione.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
}
. . .
Una volta specificata la configurazione della cache, utilizzare il file NCache metodo personalizzato fornito AddNCacheDistributedCache
metodo in Avvio.cs per impostare NCache come cache predefinita per la memorizzazione degli oggetti.
public void ConfigureServices(IServiceCollection services)
{
services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}
NCache è ora la cache sottostante per IDistributedCache
. Supponiamo che il nostro database contenga informazioni su un negozio di musica, comprese informazioni sull'album, genere, artista, dettagli sull'ordine e così via. Procediamo a recuperare i dettagli di un album, che viene archiviato come oggetto del file Album
classe. Il seguente frammento di codice tenta di ottenere i dettagli dell'album in base alla chiave di cache. Se l'elemento specificato non viene trovato nella cache, viene recuperato dal database e archiviato nella cache con una scadenza di 10 minuti. Se non viene eseguita alcuna operazione su questo oggetto entro i successivi 10 minuti, scade dalla cache. Nel frattempo, se viene recuperato dalla cache, viene restituito come oggetto di Album
.
public async Task<IActionResult> Details(
[FromServices] IDistributedCache cache,
int id)
{
var cacheKey = string.Format("album1", id);
Album album;
object value;
if (!cache.TryGetValue(cacheKey, out value)){
album = await DbContext.Albums
.Where(a => a.AlbumId == id)
.Include(a => a.Artist)
.Include(a => a.Genre)
.FirstOrDefaultAsync();
if (album != null)
{
if (_appSettings.CacheDbResults)
{
// Remove it from cache if not retrieved in last 10 minutes
cache.SetObject(cacheKey, album, new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(10)));
}
}
}
else
{
album = value as Album;
}
if (album == null)
{
return NotFound();
}
return View(album);
}
}
Vedere anche
.NETTO: Alachisoft.NCache.Caching.Distribuito spazio dei nomi.