asp.net-core
Mise en cache
Recherche…
Introduction
La mise en cache permet d'améliorer les performances d'une application en conservant une copie facilement accessible des données. Aspnet Core est livré avec deux abstractions de mise en cache faciles à utiliser et à tester.
La mémoire cache stockera les données dans la mémoire cache du serveur local.
Le cache distribué contiendra le cache de données dans un emplacement centralisé accessible par les serveurs du cluster. Il est livré avec trois implémentations originales: en mémoire (pour les tests unitaires et en développement local), Redis et Sql Server.
Utilisation du cache InMemory dans l'application ASP.NET Core
Pour utiliser un cache en mémoire dans votre application ASP.NET, ajoutez les dépendances suivantes à votre fichier project.json
:
"Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final",
Ajouter le service de cache (à partir de Microsoft.Extensions.Caching.Memory) à la méthode ConfigureServices dans la classe de démarrage
services.AddMemoryCache();
Pour ajouter des éléments au cache dans notre application, nous utiliserons IMemoryCache
qui peut être injecté dans n'importe quelle classe (par exemple Controller), comme indiqué ci-dessous.
private IMemoryCache _memoryCache;
public HomeController(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}
Get retournera la valeur si elle existe, mais renvoie 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))
Utilisez la méthode Set pour écrire dans le cache. Set accepte la clé à utiliser pour rechercher la valeur, la valeur à mettre en cache et un ensemble de MemoryCacheEntryOptions
. MemoryCacheEntryOptions
vous permet de spécifier une expiration absolue ou en temps réel du cache, une priorité de mise en cache, des rappels et des dépendances. Un des échantillons ci-dessous-
_memoryCache.Set(cacheKey, greeting,
new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(1)));
Mise en cache distribuée
Pour exploiter le cache distribué, vous devez référencer l'une des implémentations disponibles:
Par exemple, vous allez enregistrer l'implémentation de Redis comme suit:
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedRedisCache(options =>
{
options.Configuration = "ServerAdress";
options.InstanceName = "InstanceName";
});
}
Requiert IDistributedCache
dépendance IDistributedCache
là où vous en avez besoin:
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; } }