Entity Framework (EF) Core Cache

Entity Framework (EF) Core est la version repensée et réécrite du moteur de mappage relationnel d'objets Entity Framework pour .NET Core applications. Il est très léger, extensible et multiplateforme.

Cependant, des transactions élevées .NET Core applications utilisant Performances du visage EF Core et les goulots d'étranglement d'évolutivité au niveau de la base de données en cas de pics de charge. En effet, même si vous pouvez mettre à l'échelle linéairement le niveau d'application en ajoutant plus de serveurs d'applications, vous ne pouvez pas ajouter plus de serveurs de base de données pour le mettre à l'échelle.

Mais, si vous utilisez un cache distribué comme NCache dans votre .NET Core applications, vous pouvez rapidement les supprimer goulots d'étranglement en termes de performances et d'évolutivité et gérer des charges de transaction extrêmes.

Mise en cache du noyau EF via les méthodes d'extension

Les méthodes d'extension sont une fonctionnalité de C# qui vous permet d'étendre des classes et des types existants sans créer de classes dérivées. Une méthode d'extension est un type spécial de méthode statique, mais elle est appelée comme s'il s'agissait d'une méthode d'instance sur la classe étendue.

NCache a intégré ses fonctionnalités de mise en cache dans EF Core via les méthodes d'extension. Cela rend l'utilisation NCache de l'intérieur d'un Application de base EF très simple et direct. Vous trouverez ci-dessous une liste des méthodes d'extension de base EF fournies par NCache.

1. Mise en cache des données transactionnelles : FromCache() / FromCacheAsync()

Les données les plus courantes à mettre en cache dans EF Core sont les données transactionnelles. Il s'agit des données fréquemment modifiées qui sont créées au moment de l'exécution (par exemple, client, comptes, activités, etc.) et vous ne les mettez en cache que pendant une courte période pendant laquelle votre application les lit plusieurs fois.

La méthode d'extension FromCache() vous permet de mettre en cache les données transactionnelles en mettant en cache le jeu de résultats de votre Requêtes LINQ. Voir l'exemple ci-dessous.

//Load suppliers into the cache with the expiration options 
IEnumerable<Suppliers> suppliers = (from supplier in database.Suppliers
				      where supplier.SupplierId < 10
				      select supplier).FromCache(options);

Ici, avant d'aller dans la base de données pour récupérer ces données, la méthode FromCache() vérifie le cache pour ces données. S'il est trouvé, il le renvoie à partir du cache. Sinon, il le récupère dans la base de données, le met d'abord en cache pour qu'il soit là la prochaine fois, puis renvoie les résultats à l'appelant.

Vous avez la possibilité de mettre en cache l'intégralité de la collection en tant qu'élément unique dans le cache ou de séparer toutes ses entités et de les mettre en cache séparément. L'éclatement est utile si vous souhaitez également récupérer ou mettre à jour individuellement ces entités. Vous trouverez ci-dessous la version asynchrone de cette méthode.

//Load suppliers into the cache with the expiration options asynchronously
Task<IEnumerable><Suppliers> suppliersTask = (from supplier in database.Suppliers
                                                where supplier.SupplierId < 10
                                                select supplier).FromCacheAsync(options);
suppliersTask.Wait();
IEnumerable<Suppliers> suppliers = suppliersTask.Result.ToList();

2. Mise en cache des données de référence : LoadIntoCache() / LoadIntoCacheAsync()

Les données de référence sont quelque chose que vous devez entièrement mettre en cache. Cela vous permet de courir Requêtes LINQ uniquement sur le cache et ne jamais aller dans la base de données pour cela. Veuillez noter que si vous n'avez pas l'intégralité de l'ensemble de données dans le cache, les résultats de votre requête LINQ sont incorrects car ils ne vérifient que le cache et supposent que l'intégralité de l'ensemble de données se trouve dans le cache.

Avec la méthode d'extension LoadIntoCache(), vous pouvez remplir votre cache EF Core avec toutes vos données de référence. Voir l'exemple ci-dessous pour remplir votre cache.

//Load ALL products into the cache as reference data
IEnumerable<Products> products = (from product in database.Products
                                    select product)
                                    .LoadIntoCache(out string cacheKey, options);

3. Recherche de données de référence : FromCacheOnly() / FromCacheOnlyAsync()

Une fois que vous avez chargé le cache avec toutes les données de référence, vous pouvez exécuter des requêtes LINQ dessus au lieu de la base de données. Cela réduit la pression sur votre base de données et améliore les performances et l'évolutivité de votre application. Voir l'exemple ci-dessous.

//Query for discontinued products from the reference data cache
IEnumerable<Products> products = (from product in database.Products
                                    where product.Discontinued == true
                                    select product).FromCacheOnly();

Veuillez noter que votre cache de données de référence EF Core doit contenir l'intégralité de l'ensemble de données (par exemple, les produits dans ce cas). Sinon, votre méthode d'extension FromCacheOnly() ne renverra que ce qui se trouve dans le cache car elle ne vérifie pas la base de données. Et, cela peut être incorrect.

4. Mise à jour du cache : classe de cache pour EF Core

Chaque fois que vous apportez des modifications à vos entités dans EF Core, vous pouvez mettre à jour le cache EF Core avec elles en obtenant le handle "Cache" et en effectuant l'appel de méthode de mise à jour approprié. Ci-dessous un exemple.

// Initialize the database context
NorthwindContext database = new NorthwindContext();
    ...
// Add some new entities to the database
database.Shippers.Add(shipperPandaExpress);
database.Shippers.Add(shipperTitanic);
database.SaveChanges();
  
Cache cache = database.GetCache();
cache.Insert(shipperPandaExpress, out cacheKey, options);
cache.Insert(shipperTitanic, out cacheKey, options);
  
//By obtain a Cache class handle, you can directly add, update, or remove entities from EF Core. And, then updated data shows up in your LINQ queries. This gives you a lot more control over updating entities when your modifying data yourself. Below is the interface of Cache class.
    
namespace Alachisoft.NCache.EntityFrameworkCore
{
    public class Cache
    {
        public void Insert(object entity, out string cacheKey, CachingOptions options);
        public void Remove(object entity);
        public void Remove(string cacheKey);
        public void RemoveByQueryIdentifier(Tag tag);
    }
}

Pourquoi utiliser NCache comme cache de base EF ?

Entity Framework Core n'est pas livré avec son framework de mise en cache (comme Hibernation Est-ce que). Cependant, NCache a développé pour vous un cadre de mise en cache très flexible, puissant et pourtant très simple. Vous devez l'utiliser pour les raisons suivantes :

  • Utilisation en environnement multi-serveur : NCache est un cache distribué qui fonctionne très bien dans un environnement multi-serveurs. Si ton .NET Core l'application est une transaction élevée, il y a de fortes chances qu'elle s'exécute dans un environnement multi-serveur où seuls NCache travaillera pour vous.
  • Extrêmement vite: NCache est un cache distribué en mémoire extrêmement rapide et vous offre des temps de réponse inférieurs à la milliseconde.
  • Évolutivité linéaire : NCache ne devient jamais un goulot d'étranglement d'évolutivité. Il vous permet d'ajouter des serveurs au cluster de cache pour obtenir une évolutivité linéaire et gérer des charges de transaction extrêmes.
  • La taille du cache augmente à l'infini : NCache fournit le partitionnement du cache et regroupe la mémoire de tous les serveurs de cache pour cela. Afin que vous puissiez augmenter le stockage du cache en ajoutant simplement plus de serveurs au cluster de cache.
  • Réplication intelligente des données : NCache réplique intelligemment le cache et sans compromettre les performances. Ainsi, vous ne perdrez aucune donnée de cache même si un serveur de cache tombe en panne.
  • NCache vous offre 100 % de disponibilité : NCache possède de cluster de cache dynamique autoréparateur sans point de défaillance unique. Par conséquent, NCache vous permet d'ajouter ou de supprimer des serveurs de cache au moment de l'exécution sans arrêter votre application ou le cache

Veuillez consulter les détails de tous NCache fonctionnalités sur Comparaison Des Éditions page. En savoir plus sur NCache et téléchargez une version d'essai complète de 30 jours de NCache à partir des liens ci-dessous.

Que faire ensuite?

© Copyright Alachisoft 2002 - . Tous droits réservés. NCache est une marque déposée de Diyatech Corp.