La cache distribuita in memoria oggi è diventata molto popolare per le applicazioni eseguite in un ambiente multi-server perché aiuta a migliorare la scalabilità e le prestazioni delle applicazioni. Fino a quando .NET Framework 3.5 c'era un oggetto ASP.NET Cache disponibile solo per l'applicazione Web nello spazio dei nomi System.Web.Caching. Ma in .NET Framework 4.0, .NET 4.0 Cache viene aggiunta nello spazio dei nomi System.Runtime.Caching per tutti i tipi di applicazioni .NET. .NET 4.0 Cache ha funzionalità simili a ASP.NET Cache. Ma, a differenza di ASP.NET Cache, ha una classe astratta ObjectCache che può essere implementata in modo personalizzato secondo necessità. Quindi, in sostanza, .NET 4.0 Cache può essere esteso, cosa che ASP.NET Cache non può essere. Inoltre, MemoryCache è l'implementazione predefinita della cache in memoria di .NET 4.0 Cache. Ecco un esempio:
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 |
private static ObjectCache cache = MemoryCache.Default; private CacheItemPolicy policy = null; private CacheEntryRemovedCallback callback = null; // Registering callbacks and policies… callback = new CacheEntryRemovedCallback(this.MyCachedItemRemovedCallback); policy = new CacheItemPolicy(); policy.Priority = (MyCacheItemPriority == MyCachePriority.Default) ? CacheItemPriority.Default : CacheItemPriority.NotRemovable; policy.RemovedCallback = callback; HostFileChangeMonitor changeMonitor = new HostFileChangeMonitor(FilePath); policy.ChangeMonitors.Add(changeMonitor); // Add inside cache… cache.Set(CacheKeyName, CacheItem, policy); |
Una limitazione dell'implementazione predefinita di MemoryCache di .NET 4.0 Cache è che si tratta di una cache in-process autonoma. Se l'applicazione .NET viene eseguita in un ambiente multiserver, non è possibile utilizzarlo perché è necessaria una cache distribuita in grado di sincronizzare la cache su più server. Ma fortunatamente, l'architettura .NET 4.0 Cache ci consente di collegare una soluzione di cache distribuita di terze parti ed estenderla.
Per affrontare questa esigenza, Alachisoft ha implementato un Cache Provider .NET 4.0 di facile utilizzo in grado di risolvere problemi di sincronizzazione, distribuzione e scalabilità dei dati soprattutto in caso di web farm/garden. Questo provider sostanzialmente integra NCache con .NET 4.0 Cache. NCache è una cache distribuita a livello aziendale molto popolare per .NET. Attraverso NCache.NET 4.0 Cache Provider che puoi collegare NCache con la tua applicazione per ottenere i vantaggi di una cache distribuita. Lascia che ti mostri quanto facilmente può essere fatto NCache di pochi passi.
- Crea una cache cluster (distribuita) tramite GUI basata NCache Gestore. Ho creato una cache in cluster denominata "MyClusterCache".
- Avvia la cache per renderla pronta per l'uso.
- Aggiungi riferimenti di Alachisoft.NCache.ObjectCacheProvider nella tua applicazione da “NCacheInstallDir/NCache/integrazione/Provider di cache DotNet4.0"
- Includi il seguente spazio dei nomi nel tuo progetto.
1using Alachisoft.NCache.ObjectCacheProvider; - Inizializza il tuo CacheProvider (ereditato da ObjectCache) e passa il nome della cache al provider come mostrato di seguito.
1234ObjectCache _cache;string _cacheId = "MyClusterCache" ;_cache = new CacheProvider(_cacheId); - Ora puoi eseguire tutte le operazioni relative alla cache sulla tua cache usando i comandi CacheProvider.
Ecco un esempio completo di .NET 4.0 esteso per NCache:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ObjectCache _cache; string _cacheId = "MyClusterCache" ; // Initialize with NCache’s .NET 4.0 Cache Provider. _cache = new CacheProvider(_cacheId); // Registering callbacks and policies… NCacheFileChangeMonitor changeMonitor = new NCacheFileChangeMonitor(fileNames); CacheItemPolicy ciPolicy = new CacheItemPolicy(); ciPolicy.ChangeMonitors.Add(changeMonitor); ciPolicy.RemovedCallback += new CacheEntryRemovedCallback(onCacheEntryRemoved); //Add the dependent items in the cache. _cache.AddItems(ciPolicy, 0, totalKeys); |
NCache l'implementazione di .NET 4.0 Cache include anche l'implementazione personalizzata di ChangeMonitor as NCacheEntryChangeMonitor, NCacheFileChangeMonitor, NCacheSqlChangeMonitor ed NCacheOracleChangeMonitor rispettivamente per le modifiche basate su voce, file, SQL e Oracle. Attraverso NCacheCon l'implementazione dell'interfaccia .NET 4.0 Cache, ora puoi adottare .NET 4.0 Cache come standard e allo stesso tempo beneficiare di una cache distribuita di livello aziendale per le tue applicazioni .NET in esecuzione in un ambiente multi-server.
Hey ciao!
NCache ObjectCacheProvider per .Net 4.0 Cache è stato ufficialmente interrotto e quindi l'assembly Alachisoft.NCache.ObjectCacheProvider non viene più fornito con NCache installazione. Questo perché la funzionalità Caching Application Block è ora integrata .NET Framework 4.0 e la libreria Enterprise è deprecata nelle versioni successive a .Net 5.0. L'attuale supporto per la memorizzazione nella cache di .NET non viene fornito con un modello di provider che limita le integrazioni di terze parti come NCache attaccare.
È possibile utilizzare il NCache API di caching degli oggetti (caching dei dati dell'applicazione) per la memorizzazione nella cache di oggetti NCache seguendo le linee guida nel link sottostante:
https://www.alachisoft.com/resources/docs/ncache/help/basic-cache-operations.html?mw=MjQw&st=MQ==&sct=MA==&ms=QwAAEAAAAAAAAAACASgE
Ciao Iqbal,
Sto cercando di implementare il codice fornito nel blog "Come configurare .NET 4.0 Cache per utilizzare una cache distribuita?"
Ho scaricato la versione di prova di NCache Enterprise 4.6
Devo aggiungere riferimenti di Alachisoft.NCacheLibreria .ObjectCacheProvider all'applicazione da "NCacheInstallDir/NCache/integration/DotNet4.0 Cache Provider“ ma non riesco a vedere Alachisoft.NCache.ObjectCacheProvider.dll nella cartella di integrazione nella mia directory di installazione.
Potete per favore guidarmi ulteriormente dove posso trovare Alachisoft.NCache.ObjectCacheProvider.dll?
Questa funzionalità è disponibile in Ncache 4.6? Se si, come raggiungerlo?
Spero di sentirti il prima possibile.
Grazie,
beal