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;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow