Comment utiliser la mise en cache en mémoire dans ASP.NET Core

ASP.NET Core est une infrastructure légère et modulaire qui peut être utilisée pour créer des applications Web modernes et performantes sur Windows, Linux ou MacOS. Contrairement à ASP.NET hérité, ASP.NET Core n'a pas d' Cacheobjet. Cependant, ASP.NET Core prend en charge plusieurs types de mise en cache, notamment la mise en cache en mémoire, la mise en cache distribuée et la mise en cache des réponses.

Dans cet article, nous verrons comment vous pouvez améliorer les performances et l'évolutivité de votre application ASP.NET Core en stockant des données rarement modifiées dans le cache en mémoire. Comme toujours, je vais inclure des exemples de code pour illustrer les concepts discutés. 

Comment activer la mise en cache en mémoire dans ASP.NET Core

Le cache en mémoire dans ASP.NET Core est un service que vous pouvez incorporer dans votre application à l'aide de l'injection de dépendances. Une fois que vous avez créé un projet ASP.NET Core dans Visual Studio, vous pouvez activer le cache en mémoire dans la ConfigureServicesméthode de la Startupclasse, comme indiqué dans l'extrait de code ci-dessous.

public void ConfigureServices (services IServiceCollection)

{

    services.AddMvc ();

    services.AddMemoryCache ();

}

Pour utiliser le cache en mémoire dans ASP.NET Core, vous devez utiliser l' IMemoryCacheinterface. Voici à quoi ça ressemble: 

interface publique IMemoryCache: IDisposable

{

    bool TryGetValue (clé d'objet, valeur d'objet de sortie);

    ICacheEntry CreateEntry (clé d'objet);

    void Remove (clé d'objet);

}

Vous pouvez enregistrer le IMemoryCachedans la  ConfigServicesméthode en utilisant la AddMemoryCacheméthode que nous avons examinée ci-dessus. Ensuite, vous devez injecter l'objet cache dans le constructeur de votre classe de contrôleur comme indiqué dans l'extrait de code ci-dessous.

  cache IMemoryCache privé;

  CacheController public (cache IMemoryCache)

        {

            this.cache = cache;

        }

Et c'est tout ce que vous devez faire pour configurer la prise en charge de la mise en cache en mémoire dans votre application ASP.NET Core. Dans la section qui suit, nous verrons comment nous pouvons travailler avec l'API de cache dans ASP.NET Core pour stocker et récupérer des objets.

Comment stocker et récupérer des objets à l'aide d'ASP.NET Core IMemoryCache

Pour stocker un objet à l'aide de l' IMemoryCacheinterface, vous devez utiliser la Set()méthode comme indiqué dans l'extrait de code ci-dessous. Notez que la version de la Set()méthode que nous avons utilisée dans cet exemple accepte deux paramètres. Le premier paramètre est le nom de la clé et le deuxième paramètre est la valeur, c'est-à-dire l'objet qui doit être stocké dans le cache qui peut être identifié à l'aide de la clé.

[HttpGet]

        chaîne publique Get ()

        {

            cache.Set («Clé», DateTime.Now.ToString ());

            return "Ceci est une méthode de test ...";

        }

Pour récupérer un élément du cache, vous pouvez tirer parti de la Get()méthode illustrée ci-dessous.

  [HttpGet ("{clé}")]

        chaîne publique Get (clé de chaîne)

        {

            return cache.Get (clé);

        }

Vous pouvez utiliser la TryGet()méthode sur l'objet cache pour vérifier si la clé spécifiée existe dans le cache. Voici la version modifiée de notre Getméthode qui illustre comment cela peut être réalisé.

 [HttpGet]

        chaîne publique Get ()

        {

            clé de chaîne;

            string obj;

            if (! cache.TryGetValue (clé, out obj))

            {

                obj = DateTime.Now.ToString ();

                cache.Set (clé, obj);

            }

            return obj;

        }

Il existe une autre méthode, appelée GetOrCreate, qui peut être utilisée pour récupérer les données mises en cache en fonction de la clé fournie. Si la clé n'existe pas, la méthode la crée.

[HttpGet]

        chaîne publique Get ()

        {

            return cache.GetOrCreate ("Clé",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }

Notez qu'une version asynchrone de cette méthode est disponible appelée GetOrCreateAsync. Voici la liste complète des codes de notre CacheControllerclasse pour votre référence.

en utilisant le système;

en utilisant Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.Caching.Memory;

namespace InMemoryCaching.Controllers

{

    [Route ("api / [contrôleur]")]

    public class CacheController: Controller

    {

        cache IMemoryCache privé;

        CacheController public (cache IMemoryCache)

        {

            this.cache = cache;

        }

        [HttpGet]

        chaîne publique Get ()

        {

            return cache.GetOrCreate ("Clé",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }

    }

}

Comment définir des stratégies d'expiration sur les données mises en cache dans ASP.NET Core

Notez que vous pouvez définir des politiques d'expiration absolue et glissante sur vos données mises en cache. Alors que le premier est utilisé pour spécifier la durée pendant laquelle un objet doit résider dans le cache, le second est utilisé pour spécifier la durée pendant laquelle un objet résidera dans le cache lorsqu'il n'y a pas d'activité, c'est-à-dire que l'élément sera supprimé de le cache lorsque la durée d’inactivité spécifiée s’écoule.

Pour définir des politiques d'expiration, vous utilisez la MemoryCacheEntryOptionsclasse comme indiqué dans l'extrait de code ci-dessous.

MemoryCacheEntryOptions cacheExpirationOptions = new MemoryCacheEntryOptions ();

cacheExpirationOptions.AbsoluteExpiration = DateHeure.Now.AddMinutes (30);

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

cache.Set ("Clé", DateTime.Now.ToString (), cacheExpirationOptions);

Notez l'utilisation de la Prioritypropriété sur l' MemoryCacheEntryOptions instance dans l'extrait de code ci-dessus. La Prioritypropriété spécifie quels objets (en fonction de la priorité déjà définie) doivent être supprimés du cache dans le cadre d'une stratégie du runtime pour récupérer de la mémoire chaque fois que le serveur Web manque d'espace mémoire.

Pour définir la priorité, nous avons utilisé l' CacheItemPriorityénumération. Cela peut avoir l'une de ces valeurs possibles: Low, Normal, High et NeverRemove. Le fournisseur de cache en mémoire dans ASP.NET Core supprimera les entrées de cache en cas de pression mémoire, sauf si vous avez défini la priorité de cache sur CacheItemPriority.NeverRemove.

Vous pouvez également enregistrer un rappel qui s'exécutera chaque fois qu'un élément est supprimé du cache. L'extrait de code suivant illustre comment cela peut être réalisé.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, ceci);

Vous pouvez même définir des dépendances entre les objets mis en cache. Par exemple, vous souhaiterez peut-être supprimer certains éléments du cache si certains éléments associés ont été supprimés. Nous explorerons cela plus en détail et de nombreuses autres fonctionnalités de la mise en cache dans ASP.NET Core dans mes prochains articles ici. D'ici là, vous voudrez peut-être jeter un œil aux pages pertinentes de la documentation ASP.NET Core de Microsoft. 

Comment faire plus dans ASP.NET et ASP.NET Core:

  • Comment utiliser la mise en cache en mémoire dans ASP.NET Core
  • Comment gérer les erreurs dans l'API Web ASP.NET
  • Comment passer plusieurs paramètres aux méthodes du contrôleur API Web
  • Comment consigner les métadonnées de demande et de réponse dans l'API Web ASP.NET
  • Comment travailler avec HttpModules dans ASP.NET
  • Contrôle de version avancé dans l'API Web ASP.NET Core
  • Comment utiliser l'injection de dépendances dans ASP.NET Core
  • Comment travailler avec des sessions dans ASP.NET
  • Comment travailler avec HTTPHandlers dans ASP.NET
  • Comment utiliser IHostedService dans ASP.NET Core
  • Comment consommer un service SOAP WCF dans ASP.NET Core
  • Comment améliorer les performances des applications ASP.NET Core
  • Comment consommer une API Web ASP.NET Core à l'aide de RestSharp
  • Comment travailler avec la journalisation dans ASP.NET Core
  • Comment utiliser MediatR dans ASP.NET Core
  • Comment travailler avec l'état de session dans ASP.NET Core
  • Comment utiliser Nancy dans ASP.NET Core
  • Comprendre la liaison de paramètres dans l'API Web ASP.NET
  • Comment télécharger des fichiers dans ASP.NET Core MVC
  • Comment implémenter la gestion globale des exceptions dans l'API Web ASP.NET Core
  • Comment implémenter les vérifications de l'état dans ASP.NET Core
  • Meilleures pratiques de mise en cache dans ASP.NET
  • Comment utiliser la messagerie Apache Kafka dans .NET
  • Comment activer CORS sur votre API Web
  • Quand utiliser WebClient vs HttpClient vs HttpWebRequest
  • Comment travailler avec Redis Cache dans .NET
  • Quand utiliser Task.WaitAll par rapport à Task.WhenAll dans .NET