NCache integra-se aparentemente com o ASP.NET Core estrutura. Com NCache, podemos armazenar dados ou respostas do aplicativo em nosso ASP.NET Core formulários. Vamos dar uma olhada em outro NCache recurso para ASP.NET Core aplicações: Session State Caching com ASP.NET Core.
HTTP e estado da sessão
Um pouco de fundo primeiro. HTTP é um protocolo sem estado. Isso significa que as solicitações são independentes umas das outras e os servidores não armazenam dados do usuário de solicitações anteriores. Mas, se precisarmos armazenar dados do usuário enquanto nossos usuários navegam por nossos aplicativos da web, precisamos de alguma forma manter os valores do usuário entre as solicitações.
ASP.NET Core documentação oficial descreve várias abordagens para gestão do estado. Como cookies, campos ocultos e strings de consulta, entre outros.
Para manter os dados do usuário entre as solicitações, o ASP.NET Core depende de um cookie e de um mecanismo de armazenamento do lado do servidor. Em cada solicitação, ASP.NET Core passa um cookie com um identificador para buscar dados de sessão no lado do servidor. Por padrão, ASP.NET Core usa armazenamento na memória para dados de sessão.
Mas usar armazenamento na memória para dados de sessão tem algumas desvantagens. Caso nosso servidor de aplicativos fique offline, perdemos nossos dados de sessão. Se redirecionarmos nosso tráfego, não obteremos os dados da sessão replicados no novo local. E, se tivermos um farm de servidores, precisamos vincular as sessões a instâncias específicas do aplicativo, dificultando o dimensionamento do nosso aplicativo.
NCache para cache de estado de sessão HTTP
Podemos usar NCache para cache de estado de sessão.
Com o NCache, armazenamos nossos dados de sessão em um processo diferente, em um cluster, para ser mais preciso. Dessa forma, não estamos limitados pela quantidade de memória em nosso servidor de aplicativos. E podemos dimensionar nosso cluster de cache adicionando mais servidores a ele, aumentando nossa capacidade de transação e armazenamento.
Graças a NCache topologias de cache e replicação de sessão, se nosso servidor de aplicativos ficar offline, ainda teremos nossos dados de sessão disponíveis em todos os nós do servidor.
Com o NCache, podemos replicar nossos dados de sessão em outras regiões ou data centers. Sempre temos dados de sessão disponíveis em caso de recuperação de desastres, por exemplo. Até nós podemos manter os dados da sessão no local de sua criação e mover os dados da sessão somente quando movemos o tráfego entre as regiões, mantendo os custos de consumo de largura de banda baixos.
Para mais benefícios de usar NCache para o estado da sessão, verifique ASP.NET Core Benefícios e visão geral do armazenamento em cache.
Precisamos apenas de algumas alterações de código para usar NCache para cache de estado de sessão. Temos duas abordagens: usar NCache como provedor de sessão ou IDistributedCache
Fornecedor.
Antes de usar NCache como um provedor de sessão, precisamos do AspNetCore.Session.NCache
pacote NuGet e adicione o Alachisoft.NCache.Web.SessionState
espaço para nome.
Vamos adicionar NCache como um provedor de sessão para um ASP .NET 6.0 de amostra.NET Core aplicativo da web. Assim,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using Alachisoft.NCache.Web.SessionState; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); // 1. Add NCache as a Session Provider builder.Services.AddNCacheSession(config => { config.CacheName = "demoClusteredCache"; // To log all error information. (Optional) config.EnableLogs = true; // An identifier to make SessionId unique between applications. (Optional) config.SessionAppId = "demoApp"; }); // Alternatively, read settings from the appsettings.json file // //var ncacheSettingsSection = builder.Configuration.GetSection("NCacheSettings"); //builder.Services.AddNCacheSession(ncacheSettingsSection); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 2. Store NCache session data app.UseNCacheSession(); app.MapRazorPages(); app.MapDefaultControllerRoute(); app.Run(); |
Primeiro, adicionamos NCache serviços para cache de estado de sessão para o ASP.NET Core contêiner de dependências. Para isso, utilizamos o AddNCacheSession()
método. Ele espera um NCacheSessionConfiguration
objeto. Precisamos passar como parâmetro obrigatório um nome de cache. Opcionalmente, podemos habilitar logs (EnableLogs = true
) e passe um identificador de aplicativo para tornar o ID de sessão exclusivo entre os aplicativos que usam os mesmos dados de sessão (SessionAppId = "demoApp"
).
Em vez de configurar manualmente esses parâmetros, podemos usar o appsettings.json
arquivo e passe uma seção de configuração para o AddNCacheSession()
método.
Este é o appsettings.json
arquivo para as configurações do nosso exemplo anterior,
1 2 3 4 5 6 7 8 |
{ "NCacheSettings": { "CacheName": "demoClusteredCache", "EnableLogs": "true", "SessionAppId": "demoApp" }, // Other settings here... } |
Para mais detalhes sobre as configurações NCache tem para seu Provedor de Sessão, verifique ASP.NET Core Configuração do provedor de sessão.
Assim que nos registrarmos NCache serviços, precisamos configurar o pipeline de solicitação HTTP. Precisamos adicionar o UseNCacheSession()
método. Vamos ficar de olho na ordem do nosso middleware no pipeline de solicitação. Devemos adicionar o NCache middleware de sessão antes de qualquer outro middleware que leia dados de sessão.
Além disso, após adicionar NCache serviços e middleware, acessamos nossos dados de sessão usando o Http.Session
class dentro das páginas Razor e controladores MVC.
2. NCache Implementação de IDistributedCache para sessões
Em vez de usar o AddNCacheSession()
e UseNCacheSession()
métodos registrar NCache como Provedor de Sessão, podemos usar ASP.NET Core sessões com NCache Implementação de IDistributedCache.
Por padrão, ASP.NET Core tem o AddDistributedMemoryCache()
método para registrar uma implementação na memória do IDistributedCache
.
Em vez de usar essa implementação, vamos adicionar o NCache implementação usando o AddNCacheDistributedCache()
método.
Desta vez, instalamos o NCache.Microsoft.Extensions.Caching
pacote NuGet e use o Alachisoft.NCache.Caching.Distributed
namespace. Vamos alterar nosso aplicativo da Web de amostra anterior para usar NCache IDistributedCache
implementação,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using Alachisoft.NCache.Caching.Distributed; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); // 1. Add NCache Distributed Cache implementation builder.Services.AddNCacheDistributedCache(config => { config.CacheName = "demoClusteredCache"; // To log all error information. (Optional) config.EnableLogs = true; }); // 2. Add ASP.NET Core Session services builder.Services.AddSession(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 3. Add ASP.NET Core Session middleware app.UseSession(); app.MapRazorPages(); app.MapDefaultControllerRoute(); app.Run(); |
Observe, ao invés de registrar o NCache serviços e middleware para cache de estado de sessão, usamos ASP.NET Core AddSession()
e UseSession()
métodos. Porém, especificamos uma implementação de cache distribuído diferente. aquele de NCache.
Para usar o AddNCacheDistributedCache()
método, precisamos passar o nome do cache como um parâmetro obrigatório. Novamente, podemos usar o appsetttings.json
arquivo em seu lugar. Opcionalmente, podemos habilitar logs e exceções e alterar o tempo limite da solicitação e as tentativas de repetição. Para todas as opções de configuração disponíveis para IDistributedCache
implementação, verifique Configurar ASP.NET Core IDdistribuídoCache.
Após essas etapas, podemos acessar nossos dados de sessão usando o Http.Session
.
Conclusão
É assim que podemos dimensionar nosso ASP.NET Core aplicativos usando cache de estado de sessão com NCache. Consequentemente, com apenas algumas alterações de código e configurações em nossas aplicações.
NCache tem mais recursos para gerenciamento de estado. Por exemplo, NCache funciona como um ASP multirregional.NET Core Provedor de sessão. Além disso, em caso de recuperação de desastre ou reencaminhamento de tráfego, podemos replicar nossos dados de sessão para evitar a perda de nossos dados de sessão.
Além disso, para os aplicativos com bases de código herdadas que ainda usam ASP.NET Framework ao lado do novo ASP.NET Core, Podemos configurar NCache para compartilhar sessões entre os dois frameworks.
Então, dê uma olhada NCache para cache de sessão, verificando NCache Repositório oficial do GitHub para um aplicativo de exemplo usando cache de sessão para criar um jogo de adivinhação.