Caché principal de Entity Framework (EF)

.NET 100% nativo (Único de la industria)

NCache Es un proveedor de caché distribuido en memoria para Entity Framework Core (EF Core) que elimina los cuellos de botella de la base de datos mediante el almacenamiento en caché de los resultados de las consultas. Sin embargo, presenta algunas limitaciones; las aplicaciones EF Core con un alto volumen de transacciones tienden a experimentar problemas de rendimiento en la capa de base de datos debido al exceso de consultas. La capa de aplicación se puede escalar horizontalmente, pero la capa de base de datos representa un cuello de botella.

NCache, una caché distribuida 100 % nativa de .NET, optimiza las aplicaciones de EF Core al almacenar en caché los datos de acceso frecuente y descargar las consultas de la base de datos. Esto mejora el rendimiento y la escalabilidad, y reduce la carga general de la base de datos.

Por qué usar NCache como EF Core Cache?

  • Mejore el rendimiento: Reduce las visitas a la base de datos entre un 80 % y un 90 % para cargas de trabajo con uso intensivo de lectura, garantizando tiempos de respuesta inferiores a milisegundos y almacenando en caché datos transaccionales y de referencia. Incluye la caché de cliente para el almacenamiento en caché durante el proceso, que sirve los datos de acceso frecuente desde la memoria de la aplicación para minimizar la latencia.
  • Escalabilidad lineal: Proporciona escalabilidad horizontal y garantiza un rendimiento constante al admitir la implementación de múltiples servidores a medida que aumenta la carga de la aplicación.
  • Alta disponibilidad: Implementa la replicación inteligente de datos a través de la Réplica de partición, Espejo, y Caché replicados, al mismo tiempo que proporciona capacidades de autocuración y garantiza un tiempo de actividad del 100 % con un clúster de caché distribuido.
  • 100% nativo .NET: NCache está diseñado específicamente para aplicaciones .NET y EF Core; se integra sin esfuerzo con Métodos de extensión de EF Core y proporciona API de almacenamiento en caché directo de EF Core.

Almacenamiento en caché del núcleo EF mediante métodos de extensión

NCache Se extiende Núcleo EF con métodos de extensión C#, lo que permite un almacenamiento en caché sin problemas sin modificar la lógica existente.

Cómo almacenar en caché datos transaccionales (FromCache)

Los datos transaccionales incluyen registros que cambian con frecuencia, como detalles de clientes, pedidos y transacciones. El almacenamiento en caché a corto plazo de estos datos de acceso frecuente reduce las consultas a la base de datos, acelera los tiempos de respuesta y minimiza la contención.

  • Métodos: Desde caché(), DesdeCacheAsync()

    • DesdeCache(): Recupera los resultados de la consulta de la memoria caché si está disponible; de ​​lo contrario, los obtiene de la base de datos y almacena el resultado en la memoria caché para uso futuro. Desde caché() Admite las funciones Agrupar por, Ordenar por ascendente, Ordenar por descendente, Suma, Mín, Máx, Promedio, Contar, Contiene, Me gusta y Primero o predeterminado.

      var resultSet = (from cust in context.Customers
      	where cust.CustomerId == someCustomerId
      	select cust).FromCache(options).ToList();

Cómo precargar datos de referencia (LoadIntoCache)

Los datos de referencia incluyen conjuntos de datos relativamente estáticos, como catálogos de productos y valores de búsqueda. El almacenamiento en caché de estos datos a largo plazo mejora la velocidad de la aplicación al eliminar consultas redundantes a la base de datos.

  • Métodos: cargar en caché(), Cargar en caché asíncrono()

    • Cargar en caché(): Carga todo el conjunto de datos en la memoria caché, lo que garantiza que las consultas posteriores recuperen los datos directamente de la memoria caché en lugar de la base de datos.

      var resultSet = (from custOrder in context.Orders
      	where custOrder.Customer.CustomerId == someCustomerId
      	select custOrder).LoadIntoCache(out string cacheKey, options);

Consulta de datos de referencia almacenados en caché

La recuperación de datos de referencia directamente de la caché permite a las aplicaciones evitar consultas a la base de datos, lo que mejora el tiempo de respuesta. Sin embargo, todo el conjunto de datos debe estar precargado en la caché para garantizar resultados precisos y evitar respuestas incompletas a las consultas. (Recuperar datos directamente de la caché sin llamadas a la base de datos).

  • Métodos: DesdeCacheOnly(), DesdeCacheOnlyAsync()

    • DesdeCacheOnly(): Recupera los resultados de las consultas exclusivamente de la caché y no consulta la base de datos, lo que garantiza búsquedas ultrarrápidas para los conjuntos de datos precargados. Sin embargo, para que esto sea efectivo, es necesario asegurar que todo el conjunto de datos esté almacenado en caché para mantener la precisión de las consultas.

      var resultSet = (from cust in context.Customers
      	where cust.CustomerId == someCustomerId
      	select cust).FromCacheOnly();

Controlador de caché para acceso directo a la API

NCache Proporciona una API directa para gestionar entidades almacenadas en caché de forma eficiente, sin depender únicamente de los métodos de extensión de EF Core. Con su API de caché, los desarrolladores pueden insertar, actualizar y eliminar objetos de la caché mediante programación, lo que les proporciona un control preciso sobre el comportamiento del almacenamiento en caché y optimiza la recuperación de datos para aplicaciones de alto rendimiento.

  • Insertar, eliminar y actualizar entidades directamente en la caché.

    ICache cache = CacheManager.GetCache(cacheName);
    // Inserting an entity into cache
    cache.Insert(customerKey, cacheItem);

Funciones avanzadas de almacenamiento en caché para EF Core

Ejecución de consultas diferidas para agregaciones

La ejecución de consultas diferidas permite que las aplicaciones realicen funciones agregadas como Contar (), Suma (), y Promedio () Directamente sobre los datos en caché, en lugar de consultar la base de datos repetidamente. Esta función elimina la sobrecarga de red que supone obtener grandes conjuntos de datos para el cliente, ejecutando agregaciones como Count y Sum directamente en la caché en memoria. Esto reduce las consultas redundantes, mejora el rendimiento y acelera la recuperación de datos en entornos con un alto volumen de transacciones.

  • Permite el almacenamiento en caché de resultados de consultas agregados como Contar (), Suma (), y Promedio ().
  • Reduce las llamadas redundantes a la base de datos almacenando en caché los resultados de los cálculos.
    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: Ejecutar consultas LINQ directamente en la caché

NCache Permite a las aplicaciones ejecutar consultas LINQ directamente sobre los datos en caché, eliminando así la necesidad de realizar consultas repetidas a la base de datos. Al aprovechar el procesamiento en memoria, este enfoque mejora significativamente el rendimiento de las consultas y reduce la carga de la base de datos. Es posible ejecutar consultas LINQ directamente sobre los datos en caché sin acceder a la base de datos.

using (var context = new NorthwindContext())
{
    var result = context.Customers
        .Where(b => (b.CompanyName.Contains("Alfreds Futterkist")))
        .FromCacheOnly()
}

Opciones de almacenamiento en caché: ajuste su estrategia de almacenamiento en caché

NCache Proporciona opciones de almacenamiento en caché que permiten a los desarrolladores personalizar su comportamiento según los requisitos de la aplicación. Esto permite un mejor control del almacenamiento de datos, la configuración de políticas de expiración, el seguimiento de dependencias SQL para la autoinvalidación y la definición de cómo se almacenan los datos en la caché para una recuperación eficiente.

  • Controle el comportamiento de la caché con expiración absoluta para datos estáticos (como catálogos de productos) y expiración móvil para sesiones activas, garantizando que los datos permanezcan disponibles solo mientras se utilizan.
  • Admite el seguimiento de dependencia de SQL para resolver el problema de datos obsoletos invalidando automáticamente las entradas de caché cada vez que se modifica la fila de la base de datos correspondiente.
    var options = new CachingOptions
    {
        QueryIdentifier = "CustomerEntity",
        CreateDbDependency = true,
        StoreAs = StoreAs.SeperateEntities,
        Priority = Runtime.CacheItemPriority.High
    };
    options.SetAbsoluteExpiration(DateTime.Now.AddSeconds(20));

Registro y monitoreo integrados

NCache Incluye funciones integradas de registro y monitorización para monitorizar el uso de la caché, medir métricas de rendimiento y detectar posibles problemas en tiempo real. Se integra a la perfección con Microsoft.Extensions.Logging, lo que permite a los desarrolladores analizar el comportamiento de la caché, solucionar problemas y optimizar el rendimiento de forma eficiente.

  • Proporciona monitoreo en tiempo real de operaciones de EF Core almacenadas en caché.
  • Se integra completamente con Microsoft.Extensions.Logging para obtener registros detallados.

Empezar con NCache

Instale NCache Cliente para EF Core

  • Utilice NuGet para instalar el paquete requerido:
    Install-Package EntityFrameworkCore.NCache

Instale NCache Server

  • Instale NCache en dos servidores para crear un clúster de almacenamiento en caché distribuido.
  • Configurar un nodo de dos NCache agruparse con NCache Centro de Gestión.

Configurar NCache en EF Core

  • Agregar NCache configuración de DbContext. La siguiente configuración establece una conexión resiliente al habilitar Reintentos de conexión, que evita que la aplicación se bloquee durante fallas transitorias de la red entre la aplicación y el clúster de caché.
    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);
     }
    }

¿Qué hacer a continuación?

Preguntas frecuentes

NCache Resuelve el problema de datos obsoletos mediante la dependencia de SQL y la dependencia de Oracle. Cuando está habilitado, NCache Realiza un seguimiento de los cambios en la base de datos e invalida o elimina automáticamente las entradas de caché correspondientes para garantizar la coherencia de los datos entre la caché y la base de datos.

  • Desde caché() Es ideal para datos transaccionales (como pedidos de clientes). Primero revisa la caché y solo consulta la base de datos si faltan datos, para luego agregarlos a la caché.
  • cargar en caché() Es ideal para datos de referencia (como catálogos de productos). Carga todo el conjunto de datos en la caché por adelantado, lo que garantiza que las consultas posteriores sean ultrarrápidas y nunca accedan a la base de datos.

Sí. NCache Admite la ejecución diferida de consultas, lo que permite ejecutar funciones de agregación (conteo, suma, promedio, mínimo y máximo) directamente en los datos almacenados en caché. Esto elimina la sobrecarga de red que supone obtener grandes conjuntos de datos para el cliente solo para realizar un cálculo simple.

Puede evitar fallas en las aplicaciones durante fallas transitorias de la red habilitando Reintentos de conexión en tu Opciones de conexión de caché. Esta configuración configura el NCache cliente para reintentar automáticamente los intentos de conexión fallidos antes de lanzar una excepción, lo que garantiza la resiliencia de la aplicación.

NCache Actúa como una caché de segundo nivel distribuida y altamente escalable para EF Core. A diferencia de la caché local predeterminada, que se limita a la memoria de un solo servidor, NCache distribuye datos almacenados en caché en un clúster de servidores, lo que permite que su aplicación escale horizontalmente sin límites de memoria ni problemas de inconsistencia de datos.

Contáctenos

TELÉFONO

+1 214-619-2601 (EE.UU.)

+44 20 7993 8327 (Reino Unido)

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