Uso de IDistributedCache en ASP.NET Core
El uso de IDistributedCache en ASP.NET Core con NCache mejora la escalabilidad y la eficiencia de la aplicación al permitir que los datos almacenados en caché se compartan entre varios servidores de aplicaciones. Con la implementación de la IDistributedCacheIDistributedCacheinterfaz en NCache, es posible tener almacenamiento en caché de alto rendimiento junto con integridad de datos en múltiples servidores de aplicaciones.
Requisitos previos
Antes de utilizarlo, asegúrese de que se cumplen los siguientes requisitos previos:
- Instale los siguientes paquetes de NuGet en su aplicación en función de su NCache edición:
- Empresa: NCache.Extensiones.de.Microsoft.Almacenamiento en caché
- Fuente abierta: NCache.Microsoft.Extensions.Caching.OpenSource
- El caché debe estar ejecutándose.
- La aplicación debe ser conectado al caché antes de realizar la operación.
- Para obtener detalles de la API, consulte: PruebaObtenerValor, Establecer , Agregar NCacheCaché distribuido.
- Asegúrese de que los datos que se agregan sean serializable.
Cómo configurar NCache como proveedor de caché distribuida
Para utilizar NCache a través de la IDistributedCache API, necesitas agregar las configuraciones de caché en el configuración de aplicaciones.json de su aplicación. Lo siguiente IDistributedCache ejemplo agrega una sección NCacheSettings que configura el nombre de caché. Puede cambiar el nombre de acuerdo con su caché registrada.
Importante
Asegúrese de que la memoria caché especificada se esté ejecutando.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
}
. . .
Nota:
Para garantizar que la operación sea a prueba de fallas, se recomienda manejar cualquier posible excepción dentro de su aplicación, como se explica en Manejo de fallas.
Una vez especificada la configuración de la caché, utilice el NCache método personalizado proporcionado AddNCacheDistributedCache método en Inicio.cs para establecer NCache como caché predeterminado para almacenar objetos.
public void ConfigureServices(IServiceCollection services)
{
services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}
NCache ahora es el caché subyacente para IDistributedCache. Supongamos que nuestra base de datos contiene información de una tienda de música, incluida información del álbum, género, artista, detalles del pedido, etc. Procedemos a buscar los detalles de un álbum, el cual se almacena como objeto del Album clase. El siguiente fragmento de código intenta obtener los detalles del álbum según la clave de caché. Si el elemento especificado no se encuentra en la caché, se recupera de la base de datos y se almacena en la caché con una caducidad de 10 minutos. Si no se realiza ninguna operación en este objeto dentro de los próximos 10 minutos, caduca en la memoria caché. Mientras tanto, si se recupera del caché, se devuelve como un objeto de 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);
}
Vea también
.NETO: Alachisoft.NCache.Caching.Distribuido espacio de nombres