Les problèmes modernes exigent des solutions modernes. Et le besoin de performances rapides a toujours été un problème. NCache est une solution rapide à vos problèmes critiques, tels que les performances et l'évolutivité. Il fonctionne efficacement et couvre tous les domaines problématiques de votre application, bien que la mise en cache ait pour objectif principal les applications plus intensives en lecture. Ce blog explique en détail comment NCache est le meilleur choix pour vos applications à lecture intensive.
NCache Détails Évolutivité dans NCache NCache Performance
Le besoin de mise en cache
Commençons par le début et voyons pourquoi la mise en cache est nécessaire ? Sa réponse simple est le temps de réponse des bases de données. Il est certain que le stockage principal (votre base de données) contenant toutes les données au même endroit peut s'étouffer en raison d'un taux de réponse plus élevé. Qu'est-ce qui le résout ? Mise en cache - car elle fournit un stockage en mémoire et un temps de réponse plus rapide.
Deuxièmement, contrairement à une base de données, un cache étant distribué dans la nature n'a pas de point de défaillance unique, la charge est divisée et donc moins de chances que les requêtes étouffent les serveurs.
Compte tenu des faits ci-dessus dont nous venons de discuter, nous avons établi que la mise en cache est la meilleure solution pour les situations où votre intensité d'écriture n'est pas très élevée, mais l'intensité de lecture est relativement plus élevée.
Considérons un site Web contenant des informations sur le système de transport. Les tarifs des bus et les horaires sont généralement statiques, ce qui signifie qu'ils ne changent pas fréquemment. De telles applications avec des données plus intensives en lecture disposent d'un riche ensemble de fonctionnalités fournies par NCache pour effectuer des opérations de lecture plus rapides.
NCache Détails NCache Pour la mise en cache des données Haute Disponibilité
NCache en tant que magasin de cache à lecture intensive
Les applications à forte intensité de lecture ont NCache pour effectuer toutes les opérations de lecture le plus rapidement possible. NCache dispose d'un riche ensemble de fonctionnalités répondant à toutes sortes d'opérations de lecture, telles que la récupération d'éléments uniques ou en vrac. Une fois que le cache reçoit les données de la base de données, toutes les opérations de récupération vont directement au cache pour des performances et une évolutivité supérieures.
NCache Détails Opérations CRUD Évolutivité dans NCache
Obtenir des opérations dans NCache
NCache fournit diverses surcharges du Obtenir() méthode pour récupérer les données du cache avec une clé spécifique. Ces opérations sont de nature synchrone et renvoient un objet de type casté selon votre logique personnalisée. Si aucun élément n'existe dans le cache, il renvoie null.
Regardez le code ci-dessous où un client veut voir les détails de l'adresse pour s'assurer qu'ils sont corrects en utilisant le normal Obtenir() méthode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Pre-condition: Cache is already running // Items are already present in the cache // Initialize Cache ICache cache = CacheManager.GetCache("demoCache"); string customerKey = "Customer:ALFKI"; // Retrieve the Customer object Customer customer = cache.Get<Customer>(customerKey); if (customer != null) { Console.WriteLine($"Customer: {customer.ContactName}, Address : {customer.Address}"); } |
NCache permet également à l'utilisateur de Ajouter, Mises à jouret une Effacer données du cache.
NCache Détails Obtenir l'opération Opérations atomiques
Obtenir des éléments en vrac du cache
De même, vous pouvez également récupérer des éléments en vrac à partir du cache à l'aide de la ObtenirBulk() méthode. Grâce à cela, vous pouvez récupérer de nombreux éléments du cache en un seul appel.
L'exemple ci-dessous montre comment plusieurs clients sont extraits du cache en une seule opération.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Pre-condition: Items are already present in the cache // Create an array of all keys to fetch String[] keys = new String[] { "Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT", "Customer:BERGS" }; // Get items from cache IDictionary<string, Customer> retrievedItems = cache.GetBulk<Customer>(keys); // Retrieve customers and their addresses from dictionary foreach (KeyValuePair<string, Customer> retrievedItem in retrievedItems) { Console.WriteLine($"Customer: {retrievedItem.Value.ContactName}, Address : { retrievedItem.Value.Address}"); } |
En outre, NCache permet à l'utilisateur de Ajouter, inséreret une Effacer données en masse en un seul appel.
NCache Détails Opérations CRUD Opération en vrac
Récupérer des éléments à l'aide de mots-clés
Vous pouvez également récupérer des éléments en utilisant des mots-clés qui leur sont attachés pour une recherche efficace. Vous marquez vos données avec certains mots-clés basés sur des chaînes et récupérez les éléments à l'aide de ces mots-clés. Par exemple, vous souhaitez regrouper certains clients en utilisant la région à laquelle ils appartiennent, comme la côte est ou la côte ouest. L'ensemble de fonctionnalités fourni par NCache à cet effet est :
Balises nommées | Tags | Groupes |
---|---|---|
Présenté sous forme de dictionnaire | Fourni sous la forme d'un tableau de balises | Fourni sous forme de chaîne |
Peut être de n'importe quel type de données primitif | Basé sur une chaîne uniquement | Basé sur une chaîne uniquement |
Dans l'exemple ci-dessous, l'utilisateur souhaite voir les détails de tous les clients bénéficiant d'une réduction de 12 % sur l'adhésion VIP à l'aide d'une requête SQL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// Pre-conditions: Items are already present in the cache with named tags // Custom class is query indexed through NCache Web Manager or config.ncconf // Create SQL Query with the specified criteria // Make sure to use the Fully Qualified Name for custom class string query = "SELECT CustomerID, ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE VIP_Membership_Discount = 0.12"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Executing Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue<string>("CustomerID"); string customerName = reader.GetValue<string>("ContactName"); Console.WriteLine($"Customer '{customerName}' with ID '{customerID}' has VIP membership discount."); } } else { Console.WriteLine($"No VIP members found"); } |
Pour d'autres opérations utilisant des balises nommées, veuillez vous référer à NCache Docs.
NCache Détails ICacheReader Rechercher des données de cache avec des balises nommées
Rechercher dans le cache à l'aide de SQL
Pour récupérer des éléments d'une base de données particulière, les requêtes sont un moyen efficace de rechercher avec certains critères. NCache comprend parfaitement le besoin de requêtes, vous permettant de récupérer des éléments du cache à l'aide de type SQL requêtes. De plus, vous devez indice l'élément particulier dans le cache car il ne crée pas d'index par lui-même, contrairement à la base de données. Mais vous êtes prêt à utiliser la requête SQL une fois que les données sont indexées.
Il fournit des API compatibles ADO.NET comme ExécuterReader, ExécuterScalaireet une ExécuterSans Requête pour rechercher (SELECT) et supprimer (DELETE) des données du cache.
Voici les éléments pris en charge dans NCache requêtes :
- Opérateurs de requête de base (=, ==, !=. COMME, PAS COMME)
- Opérateurs logiques (AND, OR, NOT)
- Fonctions d'agrégation (SUM, COUNT, AVG, MIN, MAX)
- Divers
Regardez le code ci-dessous pour voir comment les requêtes de type SQL effectuent une recherche dans le cache. L'exemple suivant montre un utilisateur qui a appliqué le filtre pour afficher uniquement les produits dont le prix unitaire est inférieur à 100.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
//Pre-condition: Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM Alachisoft.NCache.Samples.Data.Product WHERE UnitPrice < ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("UnitPrice", 100.0); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get key of product item in cache string productKey = reader.GetValue<string>("$KEY$"); // Get product attributes string productName = reader.GetValue<string>("ProductName"); double unitPrice = reader.GetValue<double>("UnitPrice"); Console.WriteLine($"Product '{productName}' with key '{productKey}' has UnitPrice {unitPrice}"); } } else { Console.WriteLine($"No product found with price less than 100"); } |
NCache Détails Opérations prises en charge par SQL Requête SQL
Rechercher dans le cache à l'aide de LINQ
Comme SQL, NCache fournit un support pour écrire des requêtes dans LINQ pour chercher dans le cache. NCache Le fournisseur LINQ convertit Requêtes liées à LINQ développement NCacheau format SQL étendu et renvoie les résultats en conséquence après l'avoir transformé au format LINQ. Il existe deux types de syntaxe pour écrire des requêtes LINQ :
- Expression Lambda
- Expression de requête LINQ simple
Cependant, tout comme SQL, vous devez définir des index pour les données de cache consultables pour que votre requête s'exécute correctement.
Regardez l'exemple de code ci-dessous pour voir comment la requête LINQ récupère un objet du cache. L'utilisateur a appliqué le filtre pour afficher les boissons ou les produits laitiers ayant au moins 10 unités en stock.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Pre-condition: Items are already present in the cache // Create custom class LINQ object IQueryable<Product> products = new NCacheQuery<Product>(cache); // LINQ query to search cache IQueryable<Product> result = from prod in products where (prod.Category == "Beverages" || prod.Category == "Dairy") && prod.UnitsInStock > 10 select prod; if (result != null) { foreach (Product product in result) { Console.WriteLine($"Product '{product.ProductName}' in Category '{product.Category}' has stock of '{product.UnitsInStock}' units"); } } else { Console.WriteLine($"No product found"); } |
NCache Détails Requête LINQ Opérateurs de base LINQ
Conclure le blog
NCache est en fait une puissante solution de mise en cache pour augmenter les performances des applications à lecture intensive. Il accélère la vitesse et améliore les performances, l'évolutivité et la fiabilité grâce à un riche ensemble de fonctionnalités. S'il vous plaît vérifier d'autres NCache Caractéristiques sur notre site Web.