Oggi, le applicazioni Web utilizzano sempre più la cache distribuita per aumentare le prestazioni e la scalabilità memorizzando nella cache i dati utilizzati di frequente in modo da ridurre i costosi viaggi del database. La cache distribuita si estende e si sincronizza su più server cache per consentirti di scalare in modo lineare. Una buona cache distribuita di solito ha una funzione di dipendenza dalla cache che ti consente di far scadere gli elementi memorizzati nella cache quando qualcosa da cui dipendono dalle modifiche. Una dipendenza cache può essere basata su chiavi, file o database. Quindi, in sostanza puoi specificare che un elemento memorizzato nella cache dipenda da un altro elemento nella cache (basato su chiave), un file nel file system (basato su file) o una riga o un set di dati in un database di SQL Server (database -basato). E, quando i dati in una di queste origini cambiano, l'elemento memorizzato nella cache viene automaticamente rimosso dalla cache perché la "dipendenza era scaduta". Ciò ti consente di mantenere i tuoi dati memorizzati nella cache sempre aggiornati e corretti.
Va tutto bene, ma cosa succede se si desidera che gli elementi memorizzati nella cache dipendano da dati in origini dati diverse da quelle sopra menzionate. Ad esempio, potresti avere un feed RSS (Rich Site Summary) che fornisce modifiche ai dati. Inoltre, hai il tuo programma per leggere questo feed e desideri far scadere determinati elementi memorizzati nella cache in base a qualsiasi modifica ai dati che vedi nel feed RSS. Esistono molte altre situazioni simili in cui l'origine dati è "personalizzata". Pertanto, per gestire queste situazioni, una buona cache distribuita dovrebbe fornire la flessibilità necessaria per implementare la propria dipendenza dalla cache personalizzata per gli elementi memorizzati nella cache in modo che possano essere scaduti quando i dati nell'origine dati personalizzata cambiano.
NCache fornisce tale Dipendenza cache personalizzata caratteristica. NCache è una potente cache distribuita per tutti i tipi di applicazioni .NET. E, NCache ti consente di implementare le tue dipendenze personalizzate. Lascia che ti dimostri con quanta facilità puoi implementare una dipendenza personalizzata con NCache sotto. Ecco i passaggi che devi compiere:
- Aggiungi usando Alachisoft.NCache.Dipendenze.di.runtime; riferimento all'implementazione delle dipendenze personalizzate.
- NCache fornisce una classe astratta estensibile denominata ExtensibleDependency che è la classe base di tutte le dipendenze. Devi solo ereditare la tua classe di dipendenza personalizzata da ExtensibleDependency e quindi sovrascrivere la sua proprietà HasChanged. Quando questa proprietà restituirà true, l'elemento dipendente dall'elemento sarà scaduto dalla cache.
Ecco un esempio completo di implementazione delle dipendenze personalizzate in cui se le unità disponibili di un prodotto specificato sono inferiori a 100, verrà attivata la modifica delle dipendenze.
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(); } } } |
- Dopo aver implementato la tua dipendenza personalizzata e averla distribuita con NCache servizio, tutto ciò che serve è registrare questa dipendenza con gli elementi della cache dipendenti nell'applicazione, ove necessario.
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); |
Ora, quando i dati nell'origine dati personalizzata cambiano, NCache fa scadere gli elementi memorizzati nella cache dipendenti automaticamente dalla cache. NCache è responsabile dell'esecuzione del codice di dipendenza personalizzato, quindi non devi preoccuparti di implementare il tuo programma separato e ospitarlo in un processo affidabile. Prova ad esplorarlo per gli scenari specifici della tua applicazione.