ASP.NET Core IDistributedCache를 사용한 응답 캐싱
ASP.NET Core 제공 응답 캐싱 이를 통해 향후 요청에 대한 클라이언트 요청의 서버 응답을 캐시할 수 있습니다.
응답 캐싱은 응답이 캐시에서 제공되므로 애플리케이션 성능을 향상시킵니다. 또한 동일한 요청에 대해 다시 응답을 처리하고 생성할 필요가 없으므로 서버의 처리 부하를 덜어줍니다.
주의 사항
종속성을 사용한 응답 캐싱에 관한 고급 옵션을 보려면 다음으로 이동하세요. ASP.NET Core 응답 캐싱.
IDistributedCache와 함께 응답 캐싱을 언제 사용합니까?
응답 캐싱은 정적이고 수정 빈도가 거의 없는 애플리케이션 항목을 캐시하는 데 사용할 수 있습니다. 여기에는 CSS/JavaScript 파일, 미디어 또는 웹페이지의 메타데이터가 포함됩니다. 따라서 서버에 콘텐츠를 다시 요청하는 대신 캐시에서 이 데이터를 가져올 수 있습니다.
응답 캐싱 옵션
HTTPS 기반 캐싱
클라이언트의 웹 브라우저 끝에서 데이터를 캐시합니다. 이후의 모든 요청은 웹 서버 대신 캐시에서 처리되므로 클라이언트가 웹 서버에 요청하는 수가 줄어듭니다. 그러나 응답이 브라우저에 캐시되면 할당된 캐싱 시간이 만료된 후에만 만료되며 필요할 때 지울 수 없습니다.
메모리 내 캐싱
ASP를 사용하여 서버의 메모리에 데이터를 캐시합니다..NET Core의 내부 캐싱 공급자. 이 옵션은 응답을 ASP로 캐싱하는 데 더 유연합니다..NET Core 제공 캐시 태그 도우미 이를 통해 캐시해야 하는 MVC 애플리케이션의 보기를 지정하는 태그를 추가할 수 있습니다. InProc이므로 필요한 경우 ASP.NET 엔진을 다시 시작하여 캐시를 지울 수 있습니다.
분산 캐싱
애플리케이션이 웹 팜에서 호스팅되는 경우 메모리 내 데이터를 캐시합니다. 캐시는 웹 팜의 모든 서버에 분산되며 요청된 데이터가 캐시에 있으면 모든 서버가 클라이언트에 응답할 수 있습니다. 인메모리 캐싱과 유사합니다. 분산 캐시 태그 도우미 캐시해야 하는 정확한 뷰를 지정할 수 있습니다. 이곳은 NCache IDistributedCache 인터페이스를 통해 응답 캐싱을 위한 분산 캐시로 사용될 수 있기 때문에 활용됩니다. 또한 캐시가 확장 가능하고 필요할 때 캐시에서 항목을 제거할 수 있으므로 애플리케이션에 대한 제어가 더 확장됩니다.
사용 NCache 응답 캐싱용
사용 NCache 응답 캐싱을 위한 분산 캐시로, NCache 서비스 및 미들웨어를 구성하는 자체 확장 방법을 제공합니다.
사전 조건
- 애플리케이션에 다음 NuGet 패키지를 설치합니다.
- 활용하기 위해 NCache응답 캐싱을 위한 의 메서드에는 애플리케이션에 다음 네임스페이스를 포함합니다.
- 캐시가 실행 중이어야 합니다.
- API 세부 정보는 다음을 참조하세요. AddResponse캐싱.
- 추가되는 데이터가 직렬화 가능.
- 작업이 안전하도록 하려면 에 설명된 대로 응용 프로그램 내에서 잠재적인 예외를 처리하는 것이 좋습니다. 처리 실패.
- 보이지 않는 예외를 처리하려면 다음을 참조하십시오. 문제해결 안내
응답 캐싱 서비스 구성
ASP.NET Core 응답 캐싱을 위한 자체 미들웨어를 제공합니다. 이는 다음을 사용하여 서비스 컬렉션에 추가되어야 합니다. AddResponse캐싱 방법.
엽니다 Startup.cs 프로젝트의.
.
ConfigureServices
메소드에 다음 서비스를 추가하십시오.
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
// Remaining services here
}
구성 NCache 분산 캐시로
NCache IDistributedCache를 통해 사용자 지정 메서드를 제공하여 ASP.NET 응용 프로그램을 위한 분산 캐시로 구성합니다. 여기에는 캐시 이름만 필요합니다. NCache MVC 콘텐츠를 저장하기 위한 선택적 구성입니다.
방법 1: AppSettings.json에서 캐시 구성 지정
캐시 구성은 별도의 섹션으로 추가할 수 있습니다. 앱 설정.json 당신의 응용 프로그램의. 다음 예는 섹션을 추가합니다. NCacheSettings
캐시 이름을 구성합니다. 등록된 캐시에 따라 이름을 변경할 수 있습니다.
중대한
지정된 캐시가 실행 중인지 확인하십시오.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
}
. . .
캐시 구성이 지정되면 NCache 구성하려면 서비스를 추가해야 합니다. NCache 응용 프로그램의 분산 캐시로.
엽니다 Startup.cs 프로젝트의.
.
ConfigureServices
메서드에 다음 서비스를 추가합니다.AddNCacheDistributedCache
확장 메서드는 다음에서 구성을 초기화합니다. 앱 설정.json 컨테이너에 서비스를 추가하기 전에 NCache 구현으로 기본 분산 캐시로IDistributedCache
.
public void ConfigureServices(IServiceCollection services)
{
// Add NCache services to the container
services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}
방법 2: IOptions에서 구성 지정
구성을 지정하는 또 다른 방법은 구성 설정을 다음과 같이 제공하는 것입니다. IOptions
.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services
services.AddMvc();
services.AddNCacheDistributedCache(configuration =>
{
configuration.CacheName = "demoCache";
configuration.EnableLogs = true;
configuration.ExceptionsEnabled = true;
});
}
View 클래스에 분산 캐시 태그 도우미 추가
일단 NCache 서비스가 응답 캐싱을 위해 구성되었으므로 이제 캐시하려는 컨트롤러 보기의 특정 콘텐츠를 지정할 수 있습니다. ASP.NET Core 제공 분산 캐시 태그 도우미 매개변수가 포함된 태그를 조회수 구성된 캐시에 표시된 콘텐츠를 캐시합니다.
다음 예는 다음을 추가합니다. <distributed-cache>
내용에 태그 조회수 -> 정보.cshtml 다양한 매개변수를 사용합니다. 애플리케이션을 새로 고치면 콘텐츠, 일반 아이템이 다음에 따라 변경됩니다. DateTime.Now
, 태그가 지정된 콘텐츠는 캐시될 때 정적인 상태로 유지됩니다.
XNUMXD덴탈의
expires-after
속성은 콘텐츠의 절대 만료를 지정합니다. 이 항목은 10초가 지나면 캐시에서 제거됩니다. 그러나 애플리케이션을 새로 고치면 항목이 캐시에 다시 로드됩니다.XNUMXD덴탈의
name
속성은 태그 도우미의 각 인스턴스에 대한 캐시의 고유 식별자입니다.XNUMXD덴탈의
vary-by
속성은 URL의 쿼리 문자열이 이 태그에 지정된 값과 동일할 때까지 캐시에 항목을 유지합니다.
매개변수에 대한 자세한 내용은 다음을 참조하세요. 태그 도우미에 대한 Microsoft 설명서 진행하기 전에.
애플리케이션이 실행되면, 다음을 통해 캐시 통계를 모니터링할 수 있습니다. NCache 관리센터/NCache Enterprise용 모니터 또는 Professional용 PerfMon 카운터.
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<p> The value for this item will change everytime the application is refreshed.</p>
<div>@DateTime.Now.ToString()</div><br />
<p>The value for this item will be static and remain in the cache forever, unless cache is cleared.</p>
<distributed-cache name="Key:1" >
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static upon refreshing the application, but it will expire after 10 seconds.</p>
<distributed-cache name="Key:2" expires-after ="TimeSpan.FromSeconds(10)">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static and will only be removed from cache if the "vary-by" value is changed.</p>
<distributed-cache name="Key:3" vary-by ="test">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
추가 자료
NCache 응답 캐싱을 위한 샘플 애플리케이션을 제공합니다. GitHub의.
도 참조
.그물: Alachisoft.NCache.응답캐싱; 네임 스페이스.