asp.net-core
Almacenamiento en caché
Buscar..
Introducción
El almacenamiento en caché ayuda a mejorar el rendimiento de una aplicación al mantener una copia de los datos de fácil acceso. Aspnet Core viene con dos abstracciones fáciles de usar y de prueba de almacenamiento en caché.
La memoria caché almacenará los datos en la memoria caché del servidor local.
La memoria caché distribuida mantendrá la memoria caché de datos en una ubicación centralizada a la que pueden acceder los servidores en clúster. Viene con tres implementaciones listas para usar: In Memory (para pruebas de unidad y desarrollo local), Redis y Sql Server.
Usando el caché de InMemory en la aplicación Core de ASP.NET
Para usar un caché en memoria en su aplicación ASP.NET, agregue las siguientes dependencias a su archivo project.json
:
"Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final",
agregue el servicio de caché (de Microsoft.Extensions.Caching.Memory) al método ConfigureServices en la clase de inicio
services.AddMemoryCache();
Para agregar elementos al caché en nuestra aplicación, usaremos IMemoryCache
que se puede inyectar a cualquier clase (por ejemplo, el Controlador) como se muestra a continuación.
private IMemoryCache _memoryCache;
public HomeController(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}
Get devolverá el valor si existe, pero de lo contrario devuelve null
.
// try to get the cached item; null if not found
// greeting = _memoryCache.Get(cacheKey) as string;
// alternately, TryGet returns true if the cache entry was found
if(!_memoryCache.TryGetValue(cacheKey, out greeting))
Utilice el método Set para escribir en el caché. Set acepta la clave que se utilizará para buscar el valor, el valor que se almacenará en caché y un conjunto de MemoryCacheEntryOptions
. MemoryCacheEntryOptions
permite especificar la caducidad de caché basada en el tiempo absoluta o deslizante, la prioridad de caché, las devoluciones de llamada y las dependencias. Una de las siguientes muestras.
_memoryCache.Set(cacheKey, greeting,
new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(1)));
Caché distribuido
Para aprovechar el caché distribuido, deberá hacer referencia a una de las implementaciones disponibles:
Por ejemplo, registrará la implementación de Redis de la siguiente manera:
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedRedisCache(options =>
{
options.Configuration = "ServerAdress";
options.InstanceName = "InstanceName";
});
}
Requiera la dependencia de IDistributedCache
donde la necesite:
public class BooksController { private IDistributedCache distributedCache; public BooksController(IDistributedCache distributedCache) { this.distributedCache = distributedCache; } [HttpGet] public async Task<Books[]> GetAllBooks() { var serialized = this.distributedCache.GetStringAsync($"allbooks"); Books[] books = null; if (string.IsNullOrEmpty(serialized)) { books = await Books.FetchAllAsync(); this.distributedCache.SetStringAsync($"allbooks", JsonConvert.SerializeObject(books)); } else { books = JsonConvert.DeserializeObject<Books[]>(serialized); } return books; } }