O Entity Framework Core é uma versão moderna do mecanismo de mapeamento relacional de objeto de dados clássico do .NET Entity Framework. O EF Core foi rearquitetado e reescrito para torná-lo leve e multiplataforma. Ao usar o EF Core para acessar o banco de dados do aplicativo, pode haver atraso no tempo de resposta do banco de dados durante os horários de pico de carregamento. Isso compromete drasticamente a sua Desempenho do aplicativo EF Core. À medida que a carga de transação do aplicativo aumenta, você pode acomodar cargas de solicitação dimensionando linearmente a camada do aplicativo com mais servidores de aplicativos. No entanto, você não pode adicionar mais servidores de banco de dados para lidar com o aumento da carga.
É aqui que um cache distribuído, como NCache entra em jogo. Você pode armazenar em cache os dados acessados com frequência para melhorar os tempos de resposta. A natureza distribuída do cache em NCache para Entity Framework Core garante desempenho ideal sob cargas de transação extremas, tornando o cache linearmente escalável demasiado.
Usando o cache no Entity Framework Core
NCache fornece integração para armazenamento em cache no Entity Framework Core por meio de métodos de extensão. Você pode armazenar em cache os conjuntos de resultados de consultas LINQ sejam eles para dados transacionais ou dados de referência. Os seguintes métodos de extensão são fornecidos por NCache para Núcleo EF.
Armazenando em cache seus resultados de consulta LINQ – FromCache()
Tomemos como exemplo o site de uma companhia aérea que deseja buscar voos para o Havaí em julho. O conjunto de resultados é buscado com mais frequência, portanto, armazená-lo em cache seria uma boa ideia.
FromCache()
O método de extensão primeiro verifica o resultado da consulta no cache, se ele não existir no cache ou se tornou obsoleto, ele é buscado no banco de dados e adicionado ao cache também, resultando em tempos de resposta mais rápidos para solicitações futuras.
utilização NCache, você pode armazenar o conjunto de resultados da consulta como entidades separadas ou como uma única coleção. Salvar o conjunto de resultados no cache como uma coleção inteira é razoável aqui, pois qualquer alteração no conjunto de resultados exigiria que ele fosse completamente atualizado do banco de dados.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new FlightRecordsContext()) { var options = new CachingOptions { // To store as collection in cache StoreAs = StoreAs. Collection }; var resultSet = (from flight in context.Flights where flight.Destination == "Hawaii" && flight.Month == "July" select flight).FromCache(options).ToList(); } |
NCache Adicionar ao carrinho Entity Framework Core Cache Configurar o EF Core com NCache
Pré-carregar o cache com todos os dados de referência – LoadIntoCache()
Para usar o cache como sua fonte de dados primária e confiável para seus dados de referência, todos os seus dados de referência devem estar no cache primeiro. Sem isso, você não pode esperar resultados corretos de suas consultas no cache, porque alguns dos dados podem estar no banco de dados, enquanto a consulta está apenas pesquisando no cache.
Carregando dados de referência do seu aplicativo EF Core em NCache torna o acesso da solicitação muito mais rápido. LoadIntoCache()
busca o conjunto de resultados da consulta LINQ do banco de dados e carrega os dados no cache.
É assim LoadIntoCache()
funciona sob o capô:
Vamos continuar com um exemplo de catálogo de produtos de uma loja virtual. Armazenar cada produto como uma entidade separada o torna disponível para todos os tipos de combinações de consulta e buscas ainda mais rápidas de um único produto.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as separate entities in cache StoreAs = StoreAs.SeperateEntities }; var resultSet = (from product in context.Products select product).LoadIntoCache(options); } |
NCache Adicionar ao carrinho Entity Framework Core Cache NCache Documentos da API LINQ
Pesquisar dados de referência em cache com LINQ – FromCacheOnly()
Você deve carregar todos os dados de referência no cache se quiser executar consultas LINQ nele. Caso contrário, suas consultas LINQ são inválidas porque alguns dados residem no banco de dados e as consultas LINQ não estão pesquisando o banco de dados neste cenário. Isso é diferente fazendo consultas LINQ em seu banco de dados e armazenando em cache o conjunto de resultados.
A arquitetura a seguir ilustra a execução da consulta por meio do EF Core em NCache agora:
Por exemplo, buscar o produto com um ID de produto específico agora é muito mais rápido, pois a viagem é apenas para o cache:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as collection in cache StoreAs = StoreAs.Collection }; var resultSet = (from product in context.Products where product.ProductID == MatchingProductID select product).FromCacheOnly(); } |
Links relacionados: Entity Framework Core Cache NCache Documentos da API LINQ
Modificando entidades do EF Core no cache – GetCache()
O EF Core permite adicionar e atualizar entidades no banco de dados. Assim, para sincronizar o cache com o banco de dados e fazer as alterações necessárias nas entidades já existentes no cache, NCache fornece um identificador de cache que permite executar operações de adição, atualização e remoção diretamente no cache.
Por exemplo, se você quiser adicionar outro cliente no EF Core, depois de adicioná-lo ao banco de dados chamando SaveChanges()
no contexto do banco de dados, você pode obter o contexto do cache chamando GetCache()
e ligue Insert()
na instância de cache retornada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using (var database = new NorthwindContext()) { var cust = new Customers { CustomerId = "HANIH", ContactName = "Hanih Moos", ContactTitle = "Sales Representative", CompanyName = "Blauer See Delikatessen" }; var options = new CachingOptions { QueryIdentifier = new Tag("CustomerEntity"), Priority = Runtime.CacheItemPriority.Default }; Cache cache = database.GetCache(); //get NCache instance cache.Insert(cust, out string cacheKey, options); } |
Links relacionados: Entity Framework Core Cache NCache Documentos de classe de cache Webinar sobre Dimensionamento de Aplicativos EF Core
Pensamentos Finais
Incorporando o cache no EF Core por meio de NCache é simples e flexível. NCache fornece uma estrutura de cache distribuído que funciona bem em ambientes de vários servidores, oferecendo 100% de tempo de atividade e confiabilidade de dados por replicação, sem comprometer o desempenho do cache. Portanto, o armazenamento em cache no Entity Framework Core com NCache preenche as lacunas de desempenho e escalabilidade e o torna altamente eficiente.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições
Bom artigo, Normalmente eu usei o Cache do Azure para Redis para alcançar o rendimento superior e o desempenho de latência armazenando dados na memória em vez de no disco. Em termos de preços muito baratos e em termos de desempenho agrega um grande valor ao tempo de resposta.
De qualquer forma, um grande esforço para explicar o tema complexo em palavras simples.