Entity Framework Core est une version moderne du moteur de mappage relationnel d'objets de données .NET Entity Framework classique. EF Core est repensé et réécrit pour le rendre léger et multiplateforme. Lorsque vous utilisez EF Core pour accéder à votre base de données d'application, le temps de réponse de la base de données peut être retardé pendant les périodes de pointe. Cela compromet considérablement votre Performances des applications EF Core. Au fur et à mesure que la charge de transactions de votre application augmente, vous êtes en mesure de gérer les charges de demandes en mettant à l'échelle de manière linéaire le niveau d'application avec davantage de serveurs d'applications. Cependant, vous ne pouvez pas ajouter plus de serveurs de base de données pour gérer la charge accrue.
C'est là qu'un cache distribué tel que NCache entre en jeu. Vous pouvez mettre en cache les données fréquemment consultées pour améliorer les temps de réponse. La nature distribuée de la mise en cache dans NCache for Entity Framework Core garantit des performances optimales sous des charges de transaction extrêmes en rendant le cache linéairement évolutif trop.
Utilisation de la mise en cache dans Entity Framework Core
NCache fournit une intégration pour la mise en cache dans Entity Framework Core via des méthodes d'extension. Vous pouvez mettre en cache les ensembles de résultats de Requêtes LINQ qu'il s'agisse de données transactionnelles ou de données de référence. Les méthodes d'extension suivantes sont fournies par NCache pour EF Core.
Mise en cache des résultats de votre requête LINQ – FromCache()
Prenons l'exemple d'un site Web d'une compagnie aérienne qui souhaite récupérer des vols vers Hawaï en juillet. L'ensemble de résultats est récupéré plus fréquemment, donc le mettre en cache serait une bonne idée.
FromCache()
La méthode d'extension vérifie d'abord le résultat de la requête dans le cache, s'il n'existe pas dans le cache ou est devenu obsolète, il est extrait de la base de données et également ajouté au cache, ce qui accélère les temps de réponse pour les demandes futures.
En utilisant NCache, vous pouvez stocker le jeu de résultats de la requête en tant qu'entités distinctes ou en tant que collection unique. L'enregistrement du jeu de résultats dans le cache en tant que collection complète est ici raisonnable, car toute modification du jeu de résultats nécessiterait qu'il soit complètement mis à jour à partir de la base de données.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new FlightRecordsContext()) { var options = new CachingOptions { // To store as collection in cache StoreAs = StoreAs. Collection }; var resultSet = (from flight in context.Flights where flight.Destination == "Hawaii" && flight.Month == "July" select flight).FromCache(options).ToList(); } |
NCache Détails Entity Framework Core Cache Configurer EF Core avec NCache
Précharger le cache avec toutes les données de référence - LoadIntoCache ()
Pour utiliser le cache comme source de données principale et fiable pour vos données de référence, l'intégralité de vos données de référence doit d'abord se trouver dans le cache. Sans cela, vous ne pouvez pas vous attendre à des résultats corrects de vos requêtes sur le cache, car certaines données peuvent se trouver dans la base de données alors que la requête recherche uniquement le cache.
Chargement des données de référence de votre application EF Core dans NCache rend l'accès à la demande beaucoup plus rapide. LoadIntoCache()
récupère le jeu de résultats de la requête LINQ à partir de la base de données et charge les données dans le cache.
C'est ainsi que LoadIntoCache()
fonctionne sous le capot :
Continuons avec un exemple de catalogue produit d'une e-boutique. Le stockage de chaque produit en tant qu'entité distincte le rend disponible pour toutes sortes de combinaisons de requêtes et des récupérations encore plus rapides d'un seul produit.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as separate entities in cache StoreAs = StoreAs.SeperateEntities }; var resultSet = (from product in context.Products select product).LoadIntoCache(options); } |
NCache Détails Entity Framework Core Cache NCache Documentation de l'API LINQ
Rechercher des données de référence dans le cache avec LINQ – FromCacheOnly()
Vous devez charger l'intégralité des données de référence dans le cache si vous souhaitez exécuter des requêtes LINQ dessus. Sinon, vos requêtes LINQ ne sont pas valides car certaines données résident dans la base de données et les requêtes LINQ ne recherchent pas la base de données dans ce scénario. Ceci est différent en effectuant des requêtes LINQ sur votre base de données et en mettant en cache leur jeu de résultats.
L'architecture suivante illustre l'exécution de la requête via EF Core sur NCache à présent:
Par exemple, la récupération du produit avec un identifiant de produit spécifique est maintenant beaucoup plus rapide car le voyage se fait uniquement vers le cache :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as collection in cache StoreAs = StoreAs.Collection }; var resultSet = (from product in context.Products where product.ProductID == MatchingProductID select product).FromCacheOnly(); } |
Liens connexes: Entity Framework Core Cache NCache Documentation de l'API LINQ
Modification des entités EF Core dans le cache - GetCache ()
EF Core vous permet d'ajouter et de mettre à jour des entités dans la base de données. Ainsi, pour synchroniser le cache avec la base de données et apporter les modifications nécessaires aux entités déjà existantes dans le cache, NCache fournit un handle de cache qui vous permet d'effectuer des opérations d'ajout, de mise à jour et de suppression directement sur le cache.
Par exemple, si vous souhaitez ajouter un autre client dans EF Core, après l'avoir ajouté dans la base de données en appelant SaveChanges()
sur le contexte de la base de données, vous pouvez obtenir le contexte du cache en appelant GetCache()
et appelle Insert()
sur l'instance de cache renvoyée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using (var database = new NorthwindContext()) { var cust = new Customers { CustomerId = "HANIH", ContactName = "Hanih Moos", ContactTitle = "Sales Representative", CompanyName = "Blauer See Delikatessen" }; var options = new CachingOptions { QueryIdentifier = new Tag("CustomerEntity"), Priority = Runtime.CacheItemPriority.Default }; Cache cache = database.GetCache(); //get NCache instance cache.Insert(cust, out string cacheKey, options); } |
Liens connexes: Entity Framework Core Cache NCache Documents de classe de cache Mise à l'échelle des applications EF Core - Webinaire
Réflexions finales
Intégration de la mise en cache dans EF Core via NCache est simple et souple. NCache fournit une infrastructure de mise en cache distribuée qui fonctionne bien dans les environnements multi-serveurs, en vous offrant une disponibilité à 100 % et une fiabilité des données par réplication, sans compromettre les performances du cache. D'où la mise en cache dans Entity Framework Core avec NCache comble les lacunes de performance et d'évolutivité et le rend très efficace.
Bon article, Habituellement j'utilisais le Cache Azure pour Redis pour atteindre des performances de débit et de latence supérieures en stockant les données en mémoire plutôt que sur disque. En termes de prix très bon marché et en termes de performances, cela ajoute une grande valeur au temps de réponse.
Quoi qu'il en soit, un grand effort pour expliquer le sujet complexe en termes simples.