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.
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.
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();
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);
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();
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);
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.
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 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()
}
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.
var options = new CachingOptions
{
QueryIdentifier = "CustomerEntity",
CreateDbDependency = true,
StoreAs = StoreAs.SeperateEntities,
Priority = Runtime.CacheItemPriority.High
};
options.SetAbsoluteExpiration(DateTime.Now.AddSeconds(20));
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.
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 - Todos los derechos reservados. NCache es una marca registrada de Diyatech Corp.