로컬 캐시
NCache 이 시스템은 단일 노드에 상주하며 여러 서버에 데이터를 분산시키지 않고 독립적으로 작동하는 독립형 비클러스터형 캐시를 지원합니다. 로컬 캐시는 다른 클러스터형 캐시와 동일한 기능을 제공합니다. 캐싱 토폴로지로컬 캐시는 만료 정책, 제거 전략, 데이터 종속성, 쿼리, 동기화 및 캐싱 공급자를 완벽하게 지원합니다. 그러나 클러스터형 캐시와 달리 확장성이나 내결함성이 부족합니다. 단일 서버 인스턴스로 실행되므로 트랜잭션 처리량과 메모리 용량은 해당 노드의 리소스로 제한되며 서버를 추가하여 늘릴 수 없습니다. 로컬 캐시는 단일 캐시 인스턴스(백업 또는 복제본 없음)를 생성하므로 해당 인스턴스에 장애가 발생하면 캐시된 모든 데이터가 손실됩니다. 로컬 캐시는 클라이언트 수가 적고 활동량이 적은 애플리케이션이나 대량의 데이터를 캐시할 필요가 없는 애플리케이션에 적합합니다.
로컬 캐시의 격리 수준
로컬 캐시에는 다음과 같은 두 가지 격리 수준이 있습니다.
InProc(진행 중)
이 격리 수준은 캐시가 클라이언트 애플리케이션의 메모리 공간 내부에 있음을 의미합니다. 이러한 유형의 캐시는 응용 프로그램 프로세스 내부에 존재하므로 응답 시간이 더 빠릅니다. 인프로크에서는 NCache 캐시된 데이터를 라이브 객체로 유지합니다( 직렬화된 형식이는 직렬화/역직렬화 비용을 줄여줍니다. 하지만 애플리케이션과 캐시가 동일한 메모리를 공유하기 때문에 메모리 제약에 직면할 수 있습니다. 또한, 이 경우 캐시된 데이터는 해당 프로세스 외부에서 실행되는 애플리케이션과 공유할 수 없습니다.
객체는 캐시 클라이언트와 동일한 주소 공간에 저장되므로 캐시 클라이언트는 객체의 복사본이 아닌 캐시된 객체에 대한 참조를 얻습니다. 여러 스레드가 동일한 객체를 수정하는 멀티스레드 애플리케이션의 경우, 이러한 변경 사항은 .NET 프레임워크에서 제공하는 다양한 동기화 기법을 사용하여 동기화해야 합니다.
주의 사항
개체가 InProc 캐시에 직렬화된 형식으로 보관되지는 않지만 여전히 모든 개체를 다음과 같이 표시해야 합니다. Serializable. NCache 나중에 필요할 때 퇴거하는 데 도움이 되는 객체를 직렬화하여 객체의 크기를 계산합니다.
OutProc(아웃 오브 프로세스)
이 격리 수준은 캐시가 별도의 프로세스( NCache 클라이언트 애플리케이션에서 서비스 프로세스)를 수행합니다. 여러 클라이언트(로컬 및 원격)가 동일한 캐시에 연결하여 데이터를 공유할 수 있습니다. 이 경우 대기 시간은 InProc 캐시, 프로세스 외부의 의사소통 비용 때문입니다.
OutProc 로컬 캐시는 애플리케이션 내 여러 클라이언트가 동일한 캐시된 데이터에 접근해야 하는 상황에 적합합니다. 예를 들어, 각 ASP.NET 애플리케이션이 별도의 워커 프로세스에서 실행되는 웹 환경에서는 OutProc 캐시를 사용하는 것이 좋습니다. 또한, ASP.NET 애플리케이션에서는 프로세스 메모리 제약으로 인해 InProc 캐시 인스턴스를 사용하는 것이 최적의 선택은 아닙니다. 다만, 애플리케이션 프로세스와 캐시 간의 데이터 전송에 오버헤드가 발생할 수 있다는 점에 유의해야 합니다.