asp.net-core
caching
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; } }