NCache ASP.NET Core 프레임워크와 잘 통합되는 것으로 보입니다. NCacheASP.NET Core 애플리케이션에서 애플리케이션 데이터나 응답을 캐시할 수 있습니다. 다른 예를 살펴보겠습니다. NCache ASP.NET Core 애플리케이션을 위한 기능: ASP.NET Core를 사용한 세션 상태 캐싱. NCache HTTP 세션 상태 캐싱은 ASP.NET Core 애플리케이션이 사용자 세션 데이터를 로컬 서버 메모리 대신 확장 가능하고 동기화된 캐시 클러스터에 저장할 수 있도록 하는 분산 미들웨어 솔루션입니다.
주요 요점
메모리 용량 제한을 극복합니다: NCache ASP.NET Core의 기본 메모리 저장소를 대체하여 서버 재시작 또는 애플리케이션 재활용 중에 세션 데이터 손실을 방지합니다.
선형 확장성: 분산 캐싱 아키텍처를 통해 클러스터에 노드를 추가할 수 있으므로 애플리케이션 트래픽에 따라 세션 저장소가 확장될 수 있습니다.
유연한 구현: 개발자는 다음 중 하나를 선택할 수 있습니다. NCache 전용 세션 제공업체로서 (를 통해) 추가NCache세션) 또는 IDistributedCache 구현체로 (를 통해) 추가NCache분산 캐시).
고가용성 및 재해 복구: 세션 복제 및 다중 지역 지원과 같은 기능은 지역 장애 또는 트래픽 재라우팅 중에도 세션 지속성을 보장합니다.
최소한의 코드 변경: 통합에는 몇 줄의 설정만 필요합니다. 프로그램.cs (또는 Startup.cs) and 앱 설정.json 파일.
HTTP 및 세션 상태
먼저 약간의 배경. HTTP는 상태 비저장 프로토콜입니다. 즉, 요청은 서로 독립적이며 서버는 이전 요청의 사용자 데이터를 보유하지 않습니다. 그러나 사용자가 웹 애플리케이션을 탐색하는 동안 사용자 데이터를 저장해야 하는 경우 요청 사이에 사용자 값을 유지해야 합니다.
ASP.NET Core 공식 문서에서는 쿠키, 숨겨진 필드, 쿼리 문자열 등 여러 가지 상태 관리 방법을 설명합니다.
ASP.NET Core는 요청 간 사용자 데이터를 유지하기 위해 쿠키와 서버 측 저장소 메커니즘을 사용합니다. ASP.NET Core는 모든 요청 시 서버 측에서 세션 데이터를 가져오기 위한 식별자가 포함된 쿠키를 전달합니다. 기본적으로 ASP.NET Core는 세션 데이터를 메모리에 저장합니다.
그러나 세션 데이터에 대해 메모리 내 스토리지를 사용하면 몇 가지 단점이 있습니다. 애플리케이션 서버가 오프라인 상태가 되면 세션 데이터가 손실됩니다. 트래픽을 다시 라우팅하면 새 위치에 복제된 세션 데이터를 얻지 못합니다. 그리고 서버 팜이 있는 경우 세션을 특정 애플리케이션 인스턴스에 연결해야 하므로 애플리케이션을 확장하기가 어렵습니다.
NCache HTTP 세션 상태 캐싱용
우리는 사용할 수 있습니다 NCache 세션 상태 캐싱을 위해.
와 NCache, 우리는 정확하게 세션 데이터를 클러스터의 다른 프로세스에 저장합니다. 이렇게 하면 애플리케이션 서버의 메모리 양에 제한을 받지 않습니다. 또한 캐시 클러스터에 더 많은 서버를 추가하여 트랜잭션 및 스토리지 용량을 늘려 캐시 클러스터를 확장할 수 있습니다.
덕분에 NCache 캐싱 토폴로지 세션 복제, 응용 프로그램 서버가 오프라인이 되더라도 모든 서버 노드에서 세션 데이터를 계속 사용할 수 있습니다.
와 NCache, 다른 지역이나 데이터 센터에 세션 데이터를 복제할 수 있습니다. 예를 들어 재해 복구 시 항상 세션 데이터를 사용할 수 있습니다. 세션 데이터를 생성 위치에 유지하고 지역 간에 트래픽을 이동할 때만 세션 데이터를 이동하여 대역폭 소비 비용을 낮게 유지할 수 있습니다.
더 많은 혜택을 이용하려면 NCache 세션 상태 확인 ASP.NET Core 캐싱의 이점 및 개요.
사용하려면 몇 가지 코드만 변경하면 됩니다. NCache 세션 상태 캐싱을 위해. 두 가지 접근 방식이 있습니다. NCache 세션 공급자 또는 IDistributedCache 공급자.
사용하기 전에 NCache 세션 제공자로서 우리는 AspNetCore.Session.NCache NuGet 패키지를 추가하고 Alachisoft.NCache.Web.SessionState 네임 스페이스.
추가하자 NCache 샘플 .NET 6.0 ASP.NET Core 웹 애플리케이션의 세션 공급자로 사용합니다. 다음과 같습니다.
|
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 39 40 41 42 43 44 45 46 |
using Alachisoft.NCache.Web.SessionState; var builder = WebApplication.CreateBuilder(args); // Add services to the container 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(); // Configure the HTTP request pipeline if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); // Enforce HTTPS in production } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); // Ensuring authentication middleware is included app.UseAuthorization(); // 2. Store NCache session data app.UseNCacheSession(); app.MapRazorPages(); app.MapControllers(); // Updated to map API controllers properly app.Run(); |
| 매개 변수 | 기술적 역할 NCache | 정의 |
|---|---|---|
| 캐시 이름 | 필수 문자열 | 고유 식별자 NCache 클러스터(예: “데모클러스터드캐시“) 정의됨 클라이언트.ncconf. |
| 로그 활성화 | 선택적 부울 | 클라이언트 측 진단 로깅을 활성화하여 세션 작업 및 연결 문제를 추적할 수 있습니다. |
| 세션 앱 ID | 선택적 문자열 | 여러 개의 서로 다른 애플리케이션이 동일한 캐시 클러스터를 공유할 때 데이터 충돌을 방지하기 위해 세션 ID에 추가되는 접두사입니다. |
먼저 추가합니다. NCache ASP.NET Core 종속성 컨테이너에 세션 상태 캐싱을 위한 서비스를 제공합니다. 이를 위해 다음을 사용합니다. AddNCacheSession() 방법. 그것은 기대 NCacheSessionConfiguration 물체. 필수 매개변수로 캐시 이름을 전달해야 합니다. 선택적으로 로그를 활성화할 수 있습니다(EnableLogs = true) 동일한 세션 데이터를 사용하는 애플리케이션 간에 세션 ID를 고유하게 만들기 위해 애플리케이션 식별자를 전달합니다(SessionAppId = "demoApp").
이러한 매개변수를 수동으로 구성하는 대신 다음을 사용할 수 있습니다. appsettings.json 파일을 만들고 구성 섹션을 AddNCacheSession() 방법.
이것은 appsettings.json 이전 예제의 설정 파일,
|
1 2 3 4 5 6 7 8 |
{ "NCacheSettings": { "CacheName": "demoClusteredCache", "EnableLogs": "true", "SessionAppId": "demoApp" }, // Other settings here... } |
설정에 대한 자세한 내용은 NCache 세션 공급자에 대해 확인하십시오. ASP.NET Core 세션 공급자 구성.
등록하면 NCache HTTP 요청 파이프라인을 구성해야 합니다. 우리는 추가해야 UseNCacheSession() 방법. 요청 파이프라인에서 미들웨어의 순서를 계속 주시합시다. 우리는 추가해야 NCache 세션 미들웨어는 세션 데이터를 읽는 다른 미들웨어보다 먼저 시작됩니다.
추가로 추가 후 NCache 서비스 및 미들웨어, 우리는 다음을 사용하여 세션 데이터에 액세스합니다. Http.Session Razor 페이지 및 MVC 컨트롤러 내의 클래스입니다.
2. NCache 세션에 대한 IDistributedCache 구현
사용하는 대신 AddNCacheSession() UseNCacheSession() 방법 등록 NCache 세션 공급자로서 ASP.NET Core 세션을 사용할 수 있습니다. NCache IDistributedCache 구현.
ASP.NET Core는 기본적으로 다음을 가지고 있습니다. AddDistributedMemoryCache() 의 메모리 내 구현을 등록하는 방법 IDistributedCache.
해당 구현을 사용하는 대신 NCache 를 사용하여 구현 AddNCacheDistributedCache() 방법.
이번에는 다음을 설치합니다. NCache.Microsoft.Extensions.Caching NuGet 패키지 및 사용 Alachisoft.NCache.Caching.Distributed 네임스페이스. 이전 샘플 웹 애플리케이션을 사용하도록 변경해 보겠습니다. NCache IDistributedCache 이행,
|
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 39 40 41 42 43 |
using Alachisoft.NCache.Caching.Distributed; var builder = WebApplication.CreateBuilder(args); // Add services to the container 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(); // Configure the HTTP request pipeline if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); // Enforce HTTPS in production } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); // Ensuring authentication middleware is included app.UseAuthorization(); // 3. Add ASP.NET Core Session middleware app.UseSession(); app.MapRazorPages(); app.MapControllers(); // Updated to map API controllers properly app.Run(); |
알림을 등록하는 대신 NCache 세션 상태 캐싱을 위한 서비스 및 미들웨어에는 ASP.NET Core를 사용합니다. AddSession() UseSession() 행동 양식. 그러나 우리는 다른 분산 캐시 구현을 지정합니다. 에서 온 NCache.
을 사용하려면 AddNCacheDistributedCache() 메서드를 사용하려면 캐시 이름을 필수 매개변수로 전달해야 합니다. 다시 말하지만, 우리는 appsetttings.json 대신 파일. 선택적으로 로그 및 예외를 활성화하고 요청 제한 시간 및 재시도를 변경할 수 있습니다. 사용 가능한 모든 구성 옵션의 경우 IDistributedCache 구현, 확인 ASP.NET Core IDistributedCache 구성.
이 단계 후에 다음을 사용하여 세션 데이터에 액세스할 수 있습니다. Http.Session.
맺음말
이것이 바로 세션 상태 캐싱을 사용하여 ASP.NET Core 애플리케이션을 확장할 수 있는 방법입니다. NCache. 결과적으로 애플리케이션에서 몇 가지 코드 변경 및 구성만 있으면 됩니다.
NCache 상태 관리를 위한 더 많은 기능이 있습니다. 예를 들어, NCache 처럼 작동 다중 지역 ASP.NET Core 세션 공급자. 또한 재해 복구 또는 트래픽 재라우팅의 경우 세션 데이터 손실을 방지하기 위해 세션 데이터를 복제할 수 있습니다.
또한, 기존 코드베이스에서 여전히 ASP.NET Framework를 사용하고 있는 애플리케이션과 새로운 ASP.NET Core를 함께 사용하는 경우에도 다음과 같은 조치를 취할 수 있습니다. 구성 NCache 두 프레임워크 간의 세션 공유.
자, 자세히 살펴보세요 NCache 확인하여 세션 캐싱 NCache GitHub 공식 저장소 추측 게임을 빌드하기 위해 세션 캐싱을 사용하는 샘플 애플리케이션의 경우.
자주 묻는 질문 (FAQ)
Q: 어떤 순서로 추가해야 하나요? NCache 내 애플리케이션 파이프라인에 미들웨어를 사용해야 할까요?
A : NCache세션() (또는 UseSession() IDistributedCache의 경우 미들웨어는 다음에 배치해야 합니다. UseRouting() 하지만 세션 데이터에 접근해야 하는 미들웨어(예: ...)를 실행하기 전에 MapRazorPages() or MapControllers().
질문: 설정에 appsettings.json 파일을 반드시 사용해야 하나요?
A: 아니요. 사용 중에 앱 설정.json 더 깔끔한 코드를 위해 권장되며, 수동으로 구성할 수도 있습니다. NCache세션 구성 객체 바로 내부에 추가NCache세션 당신의 방법 프로그램.cs 파일.
질문: 특정 상황이 발생할 경우 세션 데이터는 어떻게 되나요? NCache 내가 연결된 노드에 오류가 발생했나요?
A: 왜냐하면 NCache 클러스터형 아키텍처와 세션 복제 기능을 사용하여 데이터가 다른 노드에 미러링됩니다. 서버 중 하나가 오프라인 상태가 되면 클러스터의 다른 노드에서 세션이 자동으로 복구되므로 사용자의 데이터 손실이 발생하지 않습니다.
Q: 사용할 수 있습니까? NCache 내 애플리케이션이 여전히 이전 ASP.NET 4.x 프레임워크에서 실행 중인 경우 세션 캐싱을 위해 어떻게 해야 할까요?
A: 네. 이 글은 ASP.NET Core에 초점을 맞추고 있지만, NCache 이 솔루션은 기존 ASP.NET 프레임워크를 위한 전용 세션 상태 공급자를 제공하며, 점진적인 마이그레이션 과정에서 두 프레임워크 간의 세션 공유도 지원합니다.
질문: 세션 객체에 대한 사용자 지정 직렬화 로직을 작성해야 합니까?
A: ASP.NET Core는 기본적으로 세션 객체를 직렬화해야 합니다. 하지만 NCache 이 기능은 표준 바이너리 직렬화보다 훨씬 빠른 "압축 직렬화" 기능을 제공하며, 소스 코드를 변경하지 않고도 설정을 통해 활성화할 수 있습니다.






