Aujourd'hui, les applications Web utilisent de plus en plus le cache distribué pour améliorer les performances et l'évolutivité en mettant en cache les données fréquemment utilisées afin de réduire les déplacements coûteux de la base de données. Le cache distribué s'étend et se synchronise sur plusieurs serveurs de cache pour vous permettre d'évoluer de manière linéaire. Un bon cache distribué a généralement une fonction de dépendance du cache pour vous permettre d'expirer les éléments mis en cache lorsque quelque chose dont ils dépendent change. Une dépendance de cache peut être basée sur une clé, sur un fichier ou sur une base de données. Ainsi, en substance, vous pouvez spécifier qu'un élément mis en cache dépend d'un autre élément du cache (basé sur une clé), d'un fichier dans le système de fichiers (basé sur un fichier) ou d'une ligne ou d'un ensemble de données dans une base de données SQL Server (base de données -basé). Et, lorsque les données de l'une de ces sources changent, votre élément mis en cache est automatiquement supprimé du cache car la "dépendance a expiré". Cela vous permet de garder vos données mises en cache à jour et correctes en permanence.
C'est bien beau, mais que faire si vous voulez que vos éléments mis en cache dépendent de données dans des sources de données autres que celles mentionnées ci-dessus. Par exemple, vous pourriez avoir un flux RSS (Rich Site Summary) qui vous fournit des modifications de données. Et, vous avez votre propre programme pour lire ce flux et souhaitez faire expirer certains éléments mis en cache en fonction des modifications de données que vous voyez dans le flux RSS. Il existe de nombreuses autres situations similaires où la source de données est « personnalisée ». Ainsi, pour gérer ces situations, un bon cache distribué doit vous offrir la possibilité d'implémenter votre propre dépendance de cache personnalisée pour vos éléments mis en cache afin qu'ils puissent expirer lorsque les données de votre source de données personnalisée changent.
NCache fournit une telle Dépendance du cache personnalisé fonction. NCache est un puissant cache distribué pour toutes sortes d'applications .NET. Et, NCache vous permet d'implémenter vos propres dépendances personnalisées. Permettez-moi de vous montrer avec quelle facilité vous pouvez implémenter une dépendance personnalisée avec NCache au dessous de. Voici les étapes que vous devez suivre :
- Ajouter en utilisant Alachisoft.NCache.Dépendances.d'exécution ; référence à votre implémentation de dépendance personnalisée.
- NCache fournit une classe abstraite extensible nommée ExtensibleDependency qui est la classe de base de toutes les dépendances. Il vous suffit d'hériter de votre classe de dépendance personnalisée d'ExtensibleDependency, puis de remplacer sa propriété HasChanged. Lorsque cette propriété renverra true, l'élément dépendant de l'élément expirera du cache.
Voici un exemple complet d'implémentation de dépendance personnalisée dans laquelle si les unités disponibles d'un produit spécifié sont inférieures à 100, le changement de dépendance sera déclenché.
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
using Alachisoft.NCache.Runtime.Dependencies; [Serializable] public class CustomDependency : ExtensibleDependency { private string _connString; private int _productID; public override bool Initialize(){ return false; } public CustomDependency(int productID, string connStr) { _connString = connStr; _productID = productID; } internal bool DetermineExpiration() { if (GetAvailableUnits(_productID) < 100) return true; return false; } internal int GetAvailableUnits(int productID) { OleDbDataReader reader=null; OleDbConnection connection= new OleDbConnection(_connString); connection.Open(); int availableUnits=-1; try { OleDbCommand cmd = connection.CreateCommand(); cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "Select UnitsInStock From Products" + " where ProductID = {0}", productID); reader = cmd.ExecuteReader(); if (reader.Read()) { availableUnits = Convert.ToInt32(reader["UnitsInStock"].ToString()); } reader.Close(); return availableUnits; } catch (Exception) { return availableUnits; } } public override bool HasChanged { get { return DetermineExpiration(); } } } |
- Une fois que vous avez implémenté votre dépendance personnalisée et l'avez déployée avec NCache service, tout ce dont vous avez besoin est d'enregistrer cette dépendance avec des éléments de cache dépendants dans votre application, là où vous en avez besoin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using Alachisoft.NCache.Web.Caching; //add namespace //Add following code in your application Cache _cache = NCache.InitializeCache("myCache"); string connString = "Provider=SQLOLEDB;Data Source=localhost; User ID=sa;password=;Initial Catalog=Northwind"; CustomDependency hint = new CustomDependency(123, connString); _cache.Add("Product:1001", "Value", new CacheDependency(hint), Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 10), Alachisoft.NCache.Runtime.CacheItemPriority.Default); |
Désormais, lorsque les données de votre source de données personnalisée changent, NCache fait expirer automatiquement les éléments mis en cache dépendants du cache. NCache est responsable de l'exécution de votre code de dépendance personnalisé afin que vous n'ayez pas à vous soucier de l'implémentation de votre propre programme séparé et de son hébergement dans un processus fiable. Essayez de l'explorer pour des scénarios spécifiques à votre application.