Sök…


Introduktion

Caching hjälper till att förbättra prestandan för en applikation genom att behålla lättillgänglig kopia av data. Aspnet Core kommer med två enkla att använda och testa vänliga cache-abstraktioner.

Memory Cache lagrar data i den lokala serverns minnescache.

Distribuerad cache kommer att hålla datacachen på en centraliserad plats som är tillgänglig för servrar i kluster. Den levereras med tre implementationer ur rutan: I minne (för enhetstestning och lokal dev), Redis och Sql Server.

Använda InMemory-cache i ASP.NET Core-applikation

Lägg till följande beroenden i din project.json fil för att använda en i minnet cache i din ASP.NET-applikation:

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

lägg till cache-tjänsten (från Microsoft.Extensions.Caching.Memory) till ConfigureServices-metoden i Startup-klassen

services.AddMemoryCache();

För att lägga till objekt i cachen i vår applikation kommer vi att använda IMemoryCache som kan injiceras till valfri klass (till exempel Controller) som visas nedan.

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

Get returnerar värdet om det finns, men annars returnerar det 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))

Använd Set- metoden för att skriva till cachen. Set accepterar nyckeln som ska användas för att slå upp värdet, värdet som ska cache och en uppsättning MemoryCacheEntryOptions . Med MemoryCacheEntryOptions kan du ange absolut eller glidande tidsbaserad cache-utgång, cacheprioritet, återuppringningar och beroenden. Ett av provet nedan-

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

Distribuerad caching

För att utnyttja distribuerad cache måste du hänvisa till en av de tillgängliga implementeringarna:

Du registrerar till exempel Redis implementering enligt följande:

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

Kräv IDistributedCache beroende där du behöver det:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow