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