Cache principale di Entity Framework (EF)

100% nativo .NET (Solo del settore)

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.

Perché usare NCache come EF Core Cache?

  • Aumenta le prestazioni: Riduce i viaggi del database dell'80-90% per carichi di lavoro ad alta intensità di lettura, garantendo tempi di risposta inferiori al millisecondo e memorizzando nella cache sia i dati transazionali che quelli di riferimento. Include la cache client per il caching in-process, che gestisce i dati a cui si accede frequentemente dalla memoria dell'applicazione per ridurre al minimo la latenza.
  • Scalabilità lineare: Fornisce scalabilità orizzontale e assicura prestazioni costanti supportando l'implementazione multi-server man mano che aumenta il carico dell'applicazione.
  • Alta disponibilità: Implementa la replicazione intelligente dei dati attraverso Partizione-Replica, Specularee Cache replicatas, offrendo al contempo funzionalità di auto-riparazione e garantendo il 100% di uptime con un cluster di cache distribuito.
  • 100% nativo .NET: NCache è progettato specificamente per le applicazioni .NET ed EF Core; si integra senza sforzo con Metodi di estensione EF Core e fornisce API di caching EF Core dirette.

Memorizzazione nella cache EF Core tramite metodi di estensione

NCache si estende EF Nucleo con metodi di estensione C#, consentendo la memorizzazione nella cache senza soluzione di continuità senza modificare la logica esistente.

Come memorizzare nella cache i dati transazionali (FromCache)

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();

Come precaricare i dati di riferimento (LoadIntoCache)

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);

Interrogazione dei dati di riferimento memorizzati nella cache

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();

Gestione cache per accesso API diretto

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);

Funzionalità di caching avanzate per EF Core

Esecuzione di query differita per aggregazioni

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.

  • Abilita la memorizzazione nella cache dei risultati delle query aggregate come Contare (), Somma ()e Media().
  • Riduce le chiamate ridondanti al database memorizzando nella cache i risultati dei calcoli.
    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();
    }

LINQ-to-Cache: esegui query LINQ direttamente sulla cache

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()
}

Opzioni di caching: perfeziona la tua strategia di cache

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.

  • Controlla il comportamento della cache con scadenza assoluta per i dati statici (come i cataloghi di prodotti) e scadenza variabile per le sessioni attive, assicurando che i dati rimangano disponibili solo finché vengono utilizzati.
  • Supporta il monitoraggio delle dipendenze SQL per risolvere il problema dei dati obsoleti invalidando automaticamente le voci della cache ogni volta che viene modificata la riga del database corrispondente.
    var options = new CachingOptions
    {
        QueryIdentifier = "CustomerEntity",
        CreateDbDependency = true,
        StoreAs = StoreAs.SeperateEntities,
        Priority = Runtime.CacheItemPriority.High
    };
    options.SetAbsoluteExpiration(DateTime.Now.AddSeconds(20));

Registrazione e monitoraggio integrati

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.

  • Fornisce il monitoraggio in tempo reale delle operazioni EF Core memorizzate nella cache.
  • Si integra completamente con Microsoft.Extensions.Logging per registri dettagliati.

Per iniziare NCache

Installazione NCache Cliente per EF Core

  • Utilizzare NuGet per installare il pacchetto richiesto:
    Install-Package EntityFrameworkCore.NCache

Installazione NCache server

  • Installazione NCache su due server per creare un cluster di caching distribuito.
  • Configurare un nodo doppio NCache cluster con NCache Centro Direzionale.

Configurazione NCache nel nucleo EF

  • Aggiungi NCache configurazione a DbContext. La configurazione seguente stabilisce una connessione resiliente abilitando Tentativi di connessione, che impedisce arresti anomali dell'applicazione durante interruzioni temporanee della rete tra l'applicazione e il cluster di cache.
    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);
     }
    }

Cosa fare dopo?

Domande frequenti (FAQ)

NCache risolve il problema dei dati obsoleti utilizzando la dipendenza SQL e la dipendenza Oracle. Se abilitato, NCache tiene traccia delle modifiche al database e invalida o rimuove automaticamente le voci della cache corrispondenti per garantire la coerenza dei dati tra la cache e il database.

  • Dalla cache() È ideale per i dati transazionali (come gli ordini dei clienti). Controlla prima la cache e interroga il database solo se i dati sono mancanti, quindi li aggiunge alla cache.
  • Carica nella cache() È ideale per i dati di riferimento (come i cataloghi di prodotti). Carica l'intero set di dati nella cache in anticipo, garantendo che le query successive siano ultraveloci e non raggiungano mai il database.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. NCache Supporta l'esecuzione differita delle query, consentendo di eseguire funzioni aggregate (Conteggio, Somma, Media, Min, Max) direttamente sui dati memorizzati nella cache in memoria. Ciò elimina il sovraccarico di rete dovuto al recupero di grandi set di dati sul client solo per eseguire un semplice calcolo.

È possibile prevenire arresti anomali delle applicazioni durante problemi di rete temporanei abilitando Tentativi di connessione nella vostra Opzioni di connessione cacheQuesta impostazione configura il NCache client per ritentare automaticamente i tentativi di connessione non riusciti prima di generare un'eccezione, garantendo la resilienza dell'applicazione.

NCache Agisce come una cache di secondo livello distribuita e altamente scalabile per EF Core. A differenza della cache locale predefinita, che è limitata alla memoria di un singolo server, NCache distribuisce i dati memorizzati nella cache su un cluster di server, consentendo all'applicazione di scalare orizzontalmente senza limiti di memoria o problemi di incoerenza dei dati.

© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.