Entity Framework (EF) Core Cache

Entity Framework (EF) Core è la versione riprogettata e riscritta del motore di mappatura relazionale degli oggetti di Entity Framework per .NET Core applicazioni. È molto leggero, estensibile e multipiattaforma.

Tuttavia, transazione elevata .NET Core applicazioni che utilizzano Prestazioni facciali EF Core e colli di bottiglia della scalabilità nel livello di database durante i picchi di carico. Questo perché, sebbene sia possibile ridimensionare linearmente il livello dell'applicazione aggiungendo più server delle applicazioni, non è possibile aggiungere più server di database per ridimensionarlo.

Ma se usi una cache distribuita come NCache nella vostra .NET Core applicazioni, puoi rimuoverle rapidamente colli di bottiglia in termini di prestazioni e scalabilità e gestire carichi di transazione estremi.

EF Core Caching tramite metodi di estensione

Metodi di estensione è una funzionalità di C# che consente di estendere classi e tipi esistenti senza creare classi derivate. Un metodo di estensione è un tipo speciale di metodo statico ma viene chiamato come se fosse un metodo di istanza nella classe estesa.

NCache ha integrato le sue funzionalità di memorizzazione nella cache in EF Core tramite i metodi di estensione. Questo rende l'utilizzo NCache dall'interno di un Applicazione EF Core molto semplice e diretto. Di seguito è riportato un elenco di metodi di estensione EF Core forniti da NCache.

1. Memorizzazione nella cache dei dati transazionali: FromCache() / FromCacheAsync()

I dati più comuni da memorizzare nella cache in EF Core sono i dati transazionali. Questi sono i dati che cambiano di frequente che vengono creati in fase di esecuzione (ad es. cliente, account, attività, ecc.) e vengono memorizzati nella cache solo per un breve periodo durante il quale l'applicazione li legge più volte.

Il metodo di estensione FromCache() ti consente di memorizzare nella cache i dati transazionali memorizzando nella cache il set di risultati del tuo LINQ query. Vedi l'esempio qui sotto.

//Load suppliers into the cache with the expiration options 
IEnumerable<Suppliers> suppliers = (from supplier in database.Suppliers
				      where supplier.SupplierId < 10
				      select supplier).FromCache(options);

Qui, prima di andare al database per recuperare questi dati, il metodo FromCache() controlla la cache per questi dati. Se trovato, lo restituisce dalla cache. In caso contrario, lo recupera dal database, lo memorizza prima nella cache in modo che sia lì la prossima volta, quindi restituisce i risultati al chiamante.

Hai la possibilità di memorizzare nella cache l'intera raccolta come un elemento nella cache o di suddividere tutte le sue entità e memorizzarle nella cache separatamente. Break out è utile se vuoi anche recuperare o aggiornare individualmente queste entità. Di seguito è riportata la versione Async di questo metodo.

//Load suppliers into the cache with the expiration options asynchronously
Task<IEnumerable><Suppliers> suppliersTask = (from supplier in database.Suppliers
                                                where supplier.SupplierId < 10
                                                select supplier).FromCacheAsync(options);
suppliersTask.Wait();
IEnumerable<Suppliers> suppliers = suppliersTask.Result.ToList();

2. Memorizzazione dei dati di riferimento nella cache: LoadIntoCache() / LoadIntoCacheAsync()

I dati di riferimento sono qualcosa che dovresti memorizzare nella cache completamente. Questo ti permette di correre LINQ query solo nella cache e non andare mai nel database per questo. Tieni presente che se non hai l'intero set di dati nella cache, i risultati della query LINQ non sono corretti perché controllano solo la cache e presuppongono che l'intero set di dati sia nella cache.

Con il metodo di estensione LoadIntoCache(), puoi popolare la tua cache EF Core con tutti i tuoi dati di riferimento. Vedi l'esempio seguente per popolare la tua cache.

//Load ALL products into the cache as reference data
IEnumerable<Products> products = (from product in database.Products
                                    select product)
                                    .LoadIntoCache(out string cacheKey, options);

3. Ricerca dei dati di riferimento: FromCacheOnly() / FromCacheOnlyAsync()

Dopo aver caricato la cache con tutti i dati di riferimento, puoi eseguire query LINQ su di essa anziché sul database. Ciò riduce la pressione sul database e migliora le prestazioni e la scalabilità delle applicazioni. Vedi l'esempio qui sotto.

//Query for discontinued products from the reference data cache
IEnumerable<Products> products = (from product in database.Products
                                    where product.Discontinued == true
                                    select product).FromCacheOnly();

Tieni presente che la cache dei dati di riferimento di EF Core deve contenere l'intero set di dati (ad es. Prodotti in questo caso). In caso contrario, il metodo di estensione FromCacheOnly() restituirà solo tutto ciò che è nella cache poiché non controlla il database. E questo potrebbe non essere corretto.

4. Aggiornamento della cache: classe cache per EF Core

Ogni volta che apporti modifiche alle entità in EF Core, puoi aggiornare EF Core Cache con esse ottenendo l'handle "Cache" ed effettuando la chiamata al metodo di aggiornamento appropriato. Di seguito è riportato un esempio.

// Initialize the database context
NorthwindContext database = new NorthwindContext();
    ...
// Add some new entities to the database
database.Shippers.Add(shipperPandaExpress);
database.Shippers.Add(shipperTitanic);
database.SaveChanges();
  
Cache cache = database.GetCache();
cache.Insert(shipperPandaExpress, out cacheKey, options);
cache.Insert(shipperTitanic, out cacheKey, options);
  
//By obtain a Cache class handle, you can directly add, update, or remove entities from EF Core. And, then updated data shows up in your LINQ queries. This gives you a lot more control over updating entities when your modifying data yourself. Below is the interface of Cache class.
    
namespace Alachisoft.NCache.EntityFrameworkCore
{
    public class Cache
    {
        public void Insert(object entity, out string cacheKey, CachingOptions options);
        public void Remove(object entity);
        public void Remove(string cacheKey);
        public void RemoveByQueryIdentifier(Tag tag);
    }
}

Perché usare NCache come EF Core Cache?

Entity Framework Core non viene fornito con il suo framework di memorizzazione nella cache (come NHibernato fa). Tuttavia, NCache ha sviluppato per te un framework di memorizzazione nella cache molto flessibile, potente e tuttavia molto semplice. Dovresti usarlo per i seguenti motivi:

  • Utilizzo in ambiente multi-server: NCache è una cache distribuita che funziona molto bene in un ambiente multi-server. Se tuo .NET Core l'applicazione è una transazione elevata, è probabile che sia in esecuzione in un ambiente multi-server dove solo NCache funzionerà per te
  • Estremamente veloce: NCache è una cache distribuita in memoria estremamente veloce e offre tempi di risposta inferiori al millisecondo.
  • Scalabilità lineare: NCache non diventa mai un collo di bottiglia della scalabilità. Ti consente di aggiungere server al cluster di cache per ottenere una scalabilità lineare e gestire carichi di transazione estremi.
  • La dimensione della cache cresce all'infinito: NCache fornisce il partizionamento della cache e raggruppa insieme la memoria di tutti i server cache. Così puoi aumentare lo spazio di archiviazione della cache semplicemente aggiungendo più server al cluster di cache.
  • Replica intelligente dei dati: NCache replica intelligentemente la cache e senza compromettere le prestazioni. Quindi, non perderai alcun dato della cache anche se un server della cache si interrompe.
  • NCache ti offre il 100% di operatività: NCache ha una cluster di cache dinamica autoriparante senza un singolo punto di errore. Di conseguenza, NCache consente di aggiungere o rimuovere server cache in fase di esecuzione senza interrompere l'applicazione o la cache

Si prega di vedere i dettagli di tutti NCache funzioni attive Confronto edizione pagina. Leggi di più su NCache e scarica una prova completa di 30 giorni funzionante di NCache dai link sottostanti.

Cosa fare dopo?

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