Hoy en día, las aplicaciones web utilizan cada vez más la caché distribuida para aumentar el rendimiento y la escalabilidad mediante el almacenamiento en caché de datos de uso frecuente para reducir los viajes costosos a la base de datos. La caché distribuida se extiende y se sincroniza en varios servidores de caché para permitirle escalar de forma lineal. Un buen caché distribuido generalmente tiene una función de Dependencia de caché que le permite caducar los elementos almacenados en caché cuando algo de lo que dependen cambia. Una dependencia de caché puede estar basada en claves, archivos o bases de datos. Entonces, en esencia, puede especificar que un elemento en caché dependa de otro elemento en el caché (basado en claves), un archivo en el sistema de archivos (basado en archivos) o una fila o un conjunto de datos en una base de datos de SQL Server (base de datos). -establecido). Y, cuando los datos en cualquiera de estas fuentes cambian, su elemento almacenado en caché se elimina automáticamente del caché porque la "dependencia expiró". Esto le permite mantener sus datos almacenados en caché siempre actualizados y correctos.
Todo esto está muy bien, pero ¿qué sucede si desea que sus elementos almacenados en caché dependan de datos en fuentes de datos distintas de las mencionadas anteriormente? Por ejemplo, puede tener una fuente RSS (Resumen del sitio enriquecido) que le proporciona cambios de datos. Además, tiene su propio programa para leer este feed y desea que caduquen ciertos elementos almacenados en caché en función de los cambios de datos que vea en el feed RSS. Hay muchas otras situaciones similares en las que la fuente de datos es "personalizada". Por lo tanto, para manejar estas situaciones, un buen caché distribuido debería proporcionarle la flexibilidad para implementar su propia Dependencia de caché personalizada para sus elementos almacenados en caché para que puedan caducar cuando cambien los datos en su fuente de datos personalizada.
NCache proporciona tal Dependencia de caché personalizada . NCache es un potente caché distribuido para todo tipo de aplicaciones .NET. Y, NCache le permite implementar sus propias dependencias personalizadas. Permítame demostrarle con qué facilidad puede implementar una dependencia personalizada con NCache abajo. Estos son los pasos que tienes que seguir:
- Agregar usando Alachisoft.NCache.Runtime.Dependencies; referencia a su implementación de dependencia personalizada.
- NCache proporciona una clase abstracta extensible denominada ExtensibleDependency, que es la clase base de todas las dependencias. Solo tiene que heredar su clase de dependencia personalizada de ExtensibleDependency y luego anular su propiedad HasChanged. Cuando esta propiedad devuelva verdadero, el elemento dependiente del elemento caducará de la memoria caché.
Aquí hay un ejemplo completo de implementación de dependencia personalizada en el que si las unidades disponibles de un producto específico son menos de 100, se activará el cambio de dependencia.
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(); } } } |
- Una vez que implementó su dependencia personalizada y la implementó con NCache servicio, todo lo que necesita es registrar esta dependencia con elementos de caché dependientes en su aplicación donde sea necesario.
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); |
Ahora, cuando cambien los datos de su fuente de datos personalizada, NCache hace caducar los elementos almacenados en caché dependientes automáticamente desde la memoria caché. NCache es responsable de ejecutar su código de dependencia personalizado, por lo que no necesita preocuparse por implementar su propio programa separado y alojarlo en algún proceso confiable. Pruébelo y explórelo para los escenarios específicos de su aplicación.