Zoeken…


Invoering

Caching helpt bij het verbeteren van de prestaties van een applicatie door een gemakkelijk toegankelijke kopie van de gegevens te behouden. Aspnet Core wordt geleverd met twee gebruiksvriendelijke en testvriendelijke caching-abstracties.

Memory Cache slaat gegevens op in de cache van de lokale server.

Gedistribueerde cache bewaart de gegevenscache op een gecentraliseerde locatie die toegankelijk is voor servers in cluster. Het wordt geleverd met drie implementaties uit de doos: in geheugen (voor het testen van eenheden en lokale dev), Redis en SQL Server.

InMemory-cache gebruiken in ASP.NET Core-toepassing

Om een geheugencache in uw ASP.NET-toepassing te gebruiken, voegt u de volgende afhankelijkheden toe aan uw project.json bestand:

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

voeg de cacheservice (van Microsoft.Extensions.Caching.Memory) toe aan de ConfigureServices-methode in de opstartklasse

services.AddMemoryCache();

Om items toe te voegen aan de cache in onze applicatie, zullen we IMemoryCache die in elke klasse (bijvoorbeeld Controller) kan worden geïnjecteerd, zoals hieronder wordt getoond.

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

Get retourneert de waarde als deze bestaat, maar anders wordt null geretourneerd.

    // 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))

Gebruik de methode Set om naar de cache te schrijven. Set accepteert de sleutel die moet worden gebruikt om de waarde, de te cachen waarde en een set MemoryCacheEntryOptions . Met MemoryCacheEntryOptions kunt u absolute of glijdende tijdgebaseerde cache-afloop, cachingprioriteit, callbacks en afhankelijkheden opgeven. Een van de onderstaande voorbeelden

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

Gedistribueerde caching

Om gedistribueerde cache te gebruiken, moet u verwijzen naar een van de beschikbare implementaties:

U registreert bijvoorbeeld de implementatie van Redis als volgt:

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

IDistributedCache afhankelijkheid waar u het nodig hebt:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow