NCache è un provider di cache in memoria distribuito per Entity Framework Core (EF Core) che elimina i colli di bottiglia del database memorizzando nella cache i risultati delle query. Tuttavia, presenta alcune limitazioni: le applicazioni EF Core con un elevato numero di transazioni potrebbero riscontrare problemi di prestazioni a livello di database a causa di troppe query. Il livello applicativo può essere scalato orizzontalmente, ma il livello del database rappresenta un collo di bottiglia.
NCache, una cache distribuita .NET nativa al 100%, potenzia le applicazioni EF Core memorizzando nella cache i dati a cui si accede di frequente e scaricando le query del database. Ciò migliora le prestazioni, la scalabilità e riduce il carico complessivo sul database.
NCache si estende EF Nucleo con metodi di estensione C#, consentendo la memorizzazione nella cache senza soluzione di continuità senza modificare la logica esistente.
I dati transazionali includono record soggetti a frequenti modifiche, come dati dei clienti, ordini e transazioni. La memorizzazione nella cache di questi dati, a cui si accede frequentemente, per un breve periodo riduce le query al database, accelera i tempi di risposta e riduce al minimo i conflitti.
Metodi: Dalla cache(), DaCacheAsync()
DaCache(): Recupera i risultati della query dalla cache, se disponibili; in caso contrario, li recupera dal database e li memorizza nella cache per un uso futuro. Dalla cache() supporta le funzioni Raggruppa per, Ordina per ordine crescente, Ordina per ordine decrescente, Somma, Min, Max, Media, Conteggio, Contiene, Mi piace e FirstOrDefault.
var resultSet = (from cust in context.Customers
where cust.CustomerId == someCustomerId
select cust).FromCache(options).ToList();
I dati di riferimento includono set di dati relativamente statici, come cataloghi di prodotti e valori di ricerca. La memorizzazione nella cache di questi dati a lungo termine aumenta la velocità delle applicazioni eliminando query di database ridondanti.
Metodi: Carica nella cache(), CaricaIntoCacheAsync()
Carica nella cache(): Carica l'intero set di dati nella cache, assicurando che le query successive recuperino i dati direttamente dalla cache anziché dal database.
var resultSet = (from custOrder in context.Orders
where custOrder.Customer.CustomerId == someCustomerId
select custOrder).LoadIntoCache(out string cacheKey, options);
Il recupero dei dati di riferimento direttamente dalla cache consente alle applicazioni di evitare query di database, migliorando i tempi di risposta. Tuttavia, l'intero set di dati deve essere precaricato nella cache per garantire risultati accurati ed evitare risposte di query incomplete. (Recupero dei dati direttamente dalla cache senza chiamate al database).
Metodi: SoloDallaCache(), DaCacheOnlyAsync()
SoloDaCache(): Recupera i risultati delle query esclusivamente dalla cache e non interroga il database, garantendo ricerche ultraveloci per i set di dati precaricati. Tuttavia, affinché questa funzionalità sia efficace, è necessario assicurarsi che l'intero set di dati sia memorizzato nella cache per mantenere l'accuratezza delle query.
var resultSet = (from cust in context.Customers
where cust.CustomerId == someCustomerId
select cust).FromCacheOnly();
NCache Fornisce un'API diretta per la gestione efficiente delle entità memorizzate nella cache, senza dover ricorrere esclusivamente ai metodi di estensione di EF Core. Grazie alla sua API di caching, gli sviluppatori possono inserire, aggiornare e rimuovere oggetti nella cache a livello di codice, ottenendo un controllo preciso sul comportamento della cache e ottimizzando al contempo il recupero dei dati per applicazioni ad alte prestazioni.
Inserisci, rimuovi e aggiorna entità direttamente nella cache.
ICache cache = CacheManager.GetCache(cacheName);
// Inserting an entity into cache
cache.Insert(customerKey, cacheItem);
L'esecuzione differita delle query consente alle applicazioni di eseguire funzioni aggregate come Contare (), Somma ()e Media() direttamente sui dati memorizzati nella cache, anziché interrogare ripetutamente il database. Questa funzionalità elimina il sovraccarico di rete dovuto al recupero di grandi set di dati sul client, eseguendo aggregazioni come Count e Sum direttamente all'interno della cache in memoria. Ciò riduce le query ridondanti, migliora le prestazioni e accelera il recupero dei dati in ambienti con un elevato numero di transazioni.
using (var context = new NorthwindContext())
{
var resultSet = context.Products
.Where(p => p.UnitPrice == 10)
.GroupBy(p => p.ProductName)
.Select(group => group.Key)
.FromCache(out cacheKey, options)
.ToList();
}
NCache Consente alle applicazioni di eseguire query LINQ direttamente sui dati memorizzati nella cache, eliminando la necessità di ripetere le query al database. Sfruttando l'elaborazione in memoria, questo approccio migliora significativamente le prestazioni delle query e riduce il carico sul database. È possibile eseguire query LINQ direttamente sui dati memorizzati nella cache, senza dover accedere al database.
using (var context = new NorthwindContext())
{
var result = context.Customers
.Where(b => (b.CompanyName.Contains("Alfreds Futterkist")))
.FromCacheOnly()
}
NCache fornisce opzioni di caching che consentono agli sviluppatori di personalizzare il comportamento della cache in base ai requisiti dell'applicazione. Ciò consente un migliore controllo sull'archiviazione dei dati, l'impostazione di policy di scadenza, l'abilitazione del tracciamento delle dipendenze SQL per l'auto-invalidazione e la definizione del modo in cui i dati vengono archiviati nella cache per un recupero efficiente.
var options = new CachingOptions
{
QueryIdentifier = "CustomerEntity",
CreateDbDependency = true,
StoreAs = StoreAs.SeperateEntities,
Priority = Runtime.CacheItemPriority.High
};
options.SetAbsoluteExpiration(DateTime.Now.AddSeconds(20));
NCache Include funzionalità integrate di registrazione e monitoraggio per monitorare l'utilizzo della cache, misurare le metriche delle prestazioni e rilevare potenziali problemi in tempo reale. Si integra perfettamente con Microsoft.Extensions.Logging, che consente agli sviluppatori di analizzare il comportamento della cache, risolvere i problemi e ottimizzare le prestazioni in modo efficiente.
Install-Package EntityFrameworkCore.NCache
public partial class NorthwindContext : DbContext
{
...
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Parameters specified in App.config
string cacheId = ConfigurationManager.AppSettings["CacheId"];
string connString = ConfigurationManager.AppSettings["ConnString"];
bool errorEnabled = bool.Parse(ConfigurationManager.AppSettings["ErrorEnabled"]);
int bulkInsertChunkSize = Int32.Parse(ConfigurationManager.AppSettings["BulkInsertChunkSize"]);
// Configure cache with connection retries and security
var options = new CacheConnectionOptions();
options.RetryInterval = TimeSpan.FromSeconds(3);
options.ConnectionRetries = 2;
options.ServerList = new List<ServerInfo>()
{
new ServerInfo("20.200.20.XX", 9800)
};
// Configure cache with security
options.UserCredentials = new Credentials("john_smith", "12345");
NCacheConfiguration.Configure(cacheId, DependencyType.SqlServer, options, errorEnabled, bulkInsertChunkSize);
optionsBuilder.UseSqlServer(connString);
}
}
© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.