Entity Framework (EF) Core Cache

Entity Framework (EF) Core es la versión rediseñada y reescrita del motor de mapeo relacional de objetos de Entity Framework para .NET Core aplicaciones Es muy ligero, extensible y multiplataforma.

Sin embargo, alta transacción .NET Core aplicaciones que utilizan Rendimiento facial EF Core y cuellos de botella de escalabilidad en el nivel de la base de datos bajo cargas máximas. Esto se debe a que, aunque puede escalar linealmente el nivel de la aplicación agregando más servidores de aplicaciones, no puede agregar más servidores de bases de datos para escalarlo.

Pero, si usa un caché distribuido como NCache en tu .NET Core aplicaciones, puede eliminarlas rápidamente cuellos de botella de rendimiento y escalabilidad y manejar cargas extremas de transacciones.

Almacenamiento en caché de EF Core a través de métodos de extensión

Extension Methods es una característica de C# que le permite ampliar clases y tipos existentes sin crear clases derivadas. Un método de extensión es un tipo especial de método estático pero se llama como si fuera un método de instancia en la clase extendida.

NCache ha integrado sus características de almacenamiento en caché en EF Core a través de métodos de extensión. Esto hace que usar NCache desde dentro de un Aplicación EF Core Muy simple y directo. A continuación se muestra una lista de los métodos de extensión de EF Core proporcionados por NCache.

1. Almacenamiento en caché de datos transaccionales: FromCache() / FromCacheAsync()

Los datos más comunes para almacenar en caché en EF Core son los datos transaccionales. Estos son los datos que cambian con frecuencia y que se crean en el tiempo de ejecución (por ejemplo, clientes, cuentas, actividades, etc.) y los almacena en caché solo por un breve período de tiempo durante el cual su aplicación los lee varias veces.

El método de extensión FromCache() le permite almacenar en caché datos transaccionales almacenando en caché el conjunto de resultados de su Consultas LINQ. Vea el ejemplo a continuación.

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

Aquí, antes de ir a la base de datos para obtener estos datos, el método FromCache() verifica el caché en busca de estos datos. Si lo encuentra, lo devuelve desde el caché. De lo contrario, lo obtiene de la base de datos, primero lo almacena en caché para que esté allí la próxima vez y luego devuelve los resultados a la persona que llama.

Tiene la opción de almacenar en caché toda la colección como un elemento en el caché o dividir todas sus entidades y almacenarlas en caché por separado. El desglose es útil si también desea obtener o actualizar estas entidades individualmente. A continuación se muestra la versión asíncrona de este método.

//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. Almacenamiento en caché de datos de referencia: LoadIntoCache() / LoadIntoCacheAsync()

Los datos de referencia son algo que debe almacenar en caché por completo. Esto le permite ejecutar Consultas LINQ solo en el caché y nunca vaya a la base de datos para ello. Tenga en cuenta que si no tiene todo el conjunto de datos en la memoria caché, los resultados de su consulta LINQ son incorrectos porque solo verifican la memoria caché y asumen que todo el conjunto de datos está en la memoria caché.

Con el método de extensión LoadIntoCache(), puede llenar su caché de EF Core con todos sus datos de referencia. Vea el ejemplo a continuación para llenar su caché.

//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. Búsqueda de datos de referencia: FromCacheOnly() / FromCacheOnlyAsync()

Una vez que haya cargado el caché con todos los datos de referencia, puede ejecutar consultas LINQ en él en lugar de en la base de datos. Esto reduce la presión sobre su base de datos y mejora el rendimiento y la escalabilidad de su aplicación. Vea el ejemplo a continuación.

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

Tenga en cuenta que su caché de datos de referencia de EF Core debe contener el conjunto de datos completo (por ejemplo, Productos en este caso). De lo contrario, su método de extensión FromCacheOnly() solo devolverá lo que esté en el caché, ya que no verifica la base de datos. Y, esto puede ser incorrecto.

4. Actualización de la caché: clase de caché para EF Core

Cada vez que realice cambios en sus Entidades en EF Core, puede actualizar la memoria caché de EF Core con ellos obteniendo el identificador "Caché" y realizando la llamada al método de actualización adecuado. A continuación se muestra un ejemplo.

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

Por qué usar NCache como EF Core Cache?

Entity Framework Core no viene con su marco de almacenamiento en caché (como NHibernate hace). Sin embargo, NCache ha desarrollado un marco de almacenamiento en caché muy flexible, potente y, sin embargo, muy simple para usted. Debe usarlo por las siguientes razones:

  • Uso en un entorno multiservidor: NCache es un caché distribuido que funciona muy bien en un entorno de varios servidores. Si tu .NET Core la aplicación tiene muchas transacciones, lo más probable es que se esté ejecutando en un entorno de varios servidores en el que solo NCache funcionará para ti.
  • Extremadamente rápido: NCache es un caché distribuido en memoria extremadamente rápido y le brinda tiempos de respuesta inferiores al milisegundo.
  • Escalabilidad lineal: NCache nunca se convierte en un cuello de botella de escalabilidad. Le permite agregar servidores al clúster de caché para lograr escalabilidad lineal y manejar cargas de transacciones extremas.
  • El tamaño del caché crece infinitamente: NCache proporciona particiones de caché y agrupa la memoria de todos los servidores de caché para ello. Así que puedes aumentar el almacenamiento en caché simplemente agregando más servidores al clúster de caché.
  • Replicación inteligente de datos: NCache replica inteligentemente la memoria caché y sin comprometer el rendimiento. Por lo tanto, no perderá ningún dato de caché, incluso si un servidor de caché deja de funcionar.
  • NCache le da 100% de tiempo de actividad: NCache tiene un Clúster de memoria caché dinámica autorreparable sin un solo punto de falla. Como resultado, NCache le permite agregar o eliminar servidores de caché en tiempo de ejecución sin detener su aplicación o el caché

Por favor vea los detalles de todos NCache características en Comparación de ediciones página. Leer más sobre NCache y descargue una versión de prueba completa de 30 días de trabajo de NCache de los enlaces a continuación.

¿Qué hacer a continuación?

© Copyright Alachisoft 2002 - Todos los derechos reservados. NCache es una marca registrada de Diyatech Corp.