Entity Framework (EF) Core Cache

O Entity Framework (EF) Core é a versão reescrita e reescrita do mecanismo de mapeamento relacional de objetos do Entity Framework para .NET Core formulários. É muito leve, extensível e multiplataforma.

No entanto, alta transação .NET Core aplicativos usando Desempenho facial do EF Core e gargalos de escalabilidade na camada de banco de dados sob cargas de pico. Isso ocorre porque, embora você possa dimensionar linearmente a camada de aplicativo adicionando mais servidores de aplicativos, não é possível incluir mais servidores de banco de dados para dimensioná-la.

Mas, se você usar um cache distribuído como NCache na sua .NET Core aplicativos, você pode remover rapidamente esses gargalos de desempenho e escalabilidade e lidar com cargas de transações extremas.

Cache do EF Core por meio de métodos de extensão

Métodos de extensão é um recurso do C# que permite estender classes e tipos existentes sem criar classes derivadas. Um Método de Extensão é um tipo especial de método estático, mas é chamado como se fosse um método de instância na classe estendida.

NCache integrou seus recursos de cache no EF Core por meio de métodos de extensão. Isso faz com que o uso NCache de dentro de um Aplicativo EF Core muito simples e direto. Abaixo está uma lista de métodos de extensão do EF Core fornecidos por NCache.

1. Cache de dados transacionais: FromCache() / FromCacheAsync()

Os dados mais comuns para armazenar em cache no EF Core são os dados transacionais. Esses são os dados frequentemente alterados que são criados em tempo de execução (por exemplo, cliente, contas, atividades, etc.) e você os armazena em cache apenas por um curto período durante o qual seu aplicativo os lê várias vezes.

O método de extensão FromCache() permite armazenar em cache dados transacionais armazenando em cache o conjunto de resultados do seu consultas LINQ. Veja o exemplo abaixo.

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

Aqui, antes de ir ao banco de dados para buscar esses dados, o método FromCache() verifica o cache desses dados. Se encontrado, ele o retorna do cache. Caso contrário, ele o busca no banco de dados, o armazena em cache primeiro para que esteja lá na próxima vez e, em seguida, retorna os resultados para o chamador.

Você tem a opção de armazenar em cache toda a coleção como um item no cache ou separar todas as suas entidades e armazená-las em cache separadamente. A quebra é útil se você também deseja buscar ou atualizar individualmente essas entidades. Abaixo está a versão assíncrona deste 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. Dados de referência de armazenamento em cache: LoadIntoCache() / LoadIntoCacheAsync()

Dados de referência são algo que você deve armazenar em cache inteiramente. Isso permite que você execute consultas LINQ apenas no cache e nunca vá para o banco de dados para isso. Observe que, se você não tiver todo o conjunto de dados no cache, os resultados da consulta LINQ estarão incorretos porque eles apenas verificam o cache e assumem que todo o conjunto de dados está no cache.

Com o método de extensão LoadIntoCache(), você pode preencher o cache do EF Core com todos os seus dados de referência. Veja o exemplo abaixo para preencher seu 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. Pesquisando dados de referência: FromCacheOnly() / FromCacheOnlyAsync()

Depois de carregar o cache com todos os dados de referência, você pode executar consultas LINQ nele em vez do banco de dados. Isso reduz a pressão em seu banco de dados e melhora o desempenho e a escalabilidade de seu aplicativo. Veja o exemplo abaixo.

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

Observe que o cache de dados de referência do EF Core deve conter todo o conjunto de dados (por exemplo, Produtos neste caso). Caso contrário, seu método de extensão FromCacheOnly() retornará apenas o que estiver no cache, pois não verifica o banco de dados. E, isso pode estar incorreto.

4. Atualizando o Cache: Classe de Cache para EF Core

Sempre que fizer alterações em suas Entidades no EF Core, você poderá atualizar o EF Core Cache com elas obtendo o identificador “Cache” e fazendo a chamada de método de atualização apropriada. Abaixo está um exemplo.

// 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 que usar NCache como EF Core Cache?

O Entity Framework Core não vem com sua estrutura de cache (como NHibernar faz). No entanto, NCache desenvolveu uma estrutura de cache muito flexível, poderosa e muito simples para você. Você deve usá-lo pelos seguintes motivos:

  • Use em ambiente multi-servidor: NCache é um cache distribuído que funciona muito bem em um ambiente multi-servidor. Se seu .NET Core aplicativo é de alta transação, as chances são de que ele esteja sendo executado em um ambiente multi-servidor onde apenas NCache vai funcionar para você.
  • Extremamente rápido: NCache é um cache distribuído na memória extremamente rápido e oferece tempos de resposta abaixo de milissegundos.
  • Escalabilidade linear: NCache nunca se torna um gargalo de escalabilidade. Ele permite adicionar servidores ao cluster de cache para obter escalabilidade linear e lidar com cargas de transações extremas.
  • O tamanho do cache cresce infinitamente: NCache fornece particionamento de cache e agrupa a memória de todos os servidores de cache para ele. Então você pode aumentar o armazenamento em cache simplesmente adicionando mais servidores ao cluster de cache.
  • Replicação de dados inteligente: NCache replica de forma inteligente o cache e sem comprometer o desempenho. Portanto, você não perderá nenhum dado de cache, mesmo que um servidor de cache fique inativo.
  • NCache oferece 100% de tempo de atividade: NCache tem um cluster de cache dinâmico de autocorreção sem um único ponto de falha. Como um resultado, NCache permite adicionar ou remover servidores de cache em tempo de execução sem interromper seu aplicativo ou o cache

Por favor, veja os detalhes de todos NCache recursos em Comparação de edições página. Leia mais sobre NCache e baixe uma avaliação completa de 30 dias do NCache nos links abaixo.

O que fazer a seguir?

© Copyright Alachisoft 2002 - . Todos os direitos reservados. NCache é uma marca registrada da Diyatech Corp.