Ricerca…


introduzione

Il caching aiuta a migliorare le prestazioni di un'applicazione mantenendo una copia dei dati facilmente accessibile. Aspnet Core è dotato di due astrazioni di caching facili da usare e da testare.

Memory Cache memorizzerà i dati nella memoria cache del server locale.

Distributed Cache conserverà la cache dei dati in una posizione centralizzata accessibile dai server nel cluster. Viene fornito con tre implementazioni fuori dalla scatola: In memoria (per unità di test e dev locale), Redis e Sql Server.

Utilizzo della cache InMemory nell'applicazione ASP.NET Core

Per utilizzare una cache di memoria nell'applicazione ASP.NET, aggiungere le seguenti dipendenze al file project.json :

  "Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final",

aggiungere il servizio cache (da Microsoft.Extensions.Caching.Memory) al metodo ConfigureServices nella classe Startup

services.AddMemoryCache();

Per aggiungere elementi alla cache nella nostra applicazione, utilizzeremo IMemoryCache che può essere iniettato in qualsiasi classe (ad esempio Controller) come mostrato di seguito.

private IMemoryCache _memoryCache;
public HomeController(IMemoryCache memoryCache)
{
    _memoryCache = memoryCache;
}

Get restituirà il valore se esiste, ma restituisce altrimenti 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))

Usa il metodo Set per scrivere nella cache. Set accetta la chiave da utilizzare per cercare il valore, il valore da memorizzare nella cache e un set di MemoryCacheEntryOptions . MemoryCacheEntryOptions consente di specificare la scadenza della cache assoluta o scorrevole basata sul tempo, la priorità di memorizzazione nella cache, i callback e le dipendenze. Uno dei seguenti esempi

_memoryCache.Set(cacheKey, greeting,
                new MemoryCacheEntryOptions()
                .SetAbsoluteExpiration(TimeSpan.FromMinutes(1)));

Caching distribuito

Per sfruttare la cache distribuita, è necessario fare riferimento a una delle implementazioni disponibili:

Ad esempio, registrerai l'implementazione di Redis come segue:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDistributedRedisCache(options =>
    {
        options.Configuration = "ServerAdress";
        options.InstanceName = "InstanceName";
    });
}

Richiedere la dipendenza IDistributedCache dove ne hai bisogno:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow