엔티티 프레임워크(EF) 코어 캐시

100% 기본 .NET (업계 유일)

NCache Entity Framework Core(EF Core)용 분산형 인메모리 캐시 공급자인 `CacheProvider`는 쿼리 결과를 캐싱하여 데이터베이스 병목 현상을 해소합니다. 하지만 몇 가지 한계점이 있습니다. 트랜잭션이 많은 EF Core 애플리케이션은 과도한 데이터베이스 쿼리로 인해 데이터베이스 계층에서 성능 문제가 발생할 가능성이 높습니다. 애플리케이션 계층은 수평 확장이 가능하지만, 데이터베이스 계층은 병목 현상을 일으킵니다.

NCache, 100% 네이티브 .NET 분산 캐시는 자주 액세스하는 데이터를 캐싱하고 데이터베이스 쿼리를 오프로드하여 EF Core 애플리케이션을 향상시킵니다. 이를 통해 성능과 확장성이 향상되고 데이터베이스의 전체 부하가 줄어듭니다.

왜 사용 하는가? NCache EF 코어 캐시로?

  • 성능 향상: 읽기 작업이 많은 워크로드에서 데이터베이스 접근 횟수를 80~90% 줄여 1밀리초 미만의 응답 시간을 보장하고, 트랜잭션 데이터와 참조 데이터를 모두 캐싱합니다. 프로세스 내 캐싱을 위한 클라이언트 캐시가 포함되어 있어 자주 액세스하는 데이터를 애플리케이션 메모리에서 제공하여 지연 시간을 최소화합니다.
  • 선형 확장성: 이 솔루션은 수평적 확장을 제공하고 애플리케이션 부하가 증가함에 따라 다중 서버 배포를 지원하여 일관된 성능을 보장합니다.
  • 고가용성: 다음을 통해 지능형 데이터 복제를 구현합니다. 파티션-복제본, 미러예산 및 복제된 캐시s는 자체 복구 기능을 제공하고 분산 캐시 클러스터로 100% 가동 시간을 보장합니다.
  • 100% 네이티브 .NET: NCache .NET 및 EF Core 애플리케이션용으로 특별히 설계되었으며 손쉽게 통합됩니다. EF Core 확장 방법 EF Core 캐싱 API를 직접 제공합니다.

확장 메서드를 통한 EF Core 캐싱

NCache 확장하다 EF 코어 C# 확장 메서드를 사용하면 기존 논리를 수정하지 않고도 원활한 캐싱이 가능합니다.

트랜잭션 데이터를 캐싱하는 방법(FromCache)

거래 데이터에는 고객 정보, 주문, 거래 내역 등 자주 변경되는 레코드가 포함됩니다. 자주 액세스하는 이러한 데이터를 단기적으로 캐싱하면 데이터베이스 쿼리가 감소하고, 응답 시간이 단축되며, 경합이 최소화됩니다.

  • 행동 양식: 캐시에서(), FromCacheAsync()

    • FromCache(): 캐시가 있으면 쿼리 결과를 검색하고, 그렇지 않으면 데이터베이스에서 가져와 나중에 사용할 수 있도록 캐시에 저장합니다. 캐시에서() 그룹화, 오름차순 정렬, 내림차순 정렬, 합계, 최소값, 최대값, 평균, 개수, 포함, 유사값 및 FirstOrDefault 함수를 지원합니다.

      var resultSet = (from cust in context.Customers
      	where cust.CustomerId == someCustomerId
      	select cust).FromCache(options).ToList();

참조 데이터 사전 로드 방법(캐시에 로드)

참조 데이터에는 제품 카탈로그나 조회 값과 같은 비교적 정적인 데이터 세트가 포함됩니다. 이러한 데이터를 장기간 캐싱하면 중복된 데이터베이스 쿼리를 제거하여 애플리케이션 속도를 향상시킬 수 있습니다.

  • 행동 양식: 로드인투캐시(), LoadIntoCacheAsync()

    • 로드인투캐시(): 전체 데이터 세트를 캐시에 로드하여 후속 쿼리가 데이터베이스가 아닌 캐시에서 직접 데이터를 검색할 수 있도록 합니다.

      var resultSet = (from custOrder in context.Orders
      	where custOrder.Customer.CustomerId == someCustomerId
      	select custOrder).LoadIntoCache(out string cacheKey, options);

캐시된 참조 데이터 쿼리

캐시에서 직접 참조 데이터를 검색하면 애플리케이션이 데이터베이스 쿼리를 피하고 응답 시간을 개선할 수 있습니다. 그러나 정확한 결과를 보장하고 불완전한 쿼리 응답을 피하려면 전체 데이터 세트를 캐시에 미리 로드해야 합니다. (데이터베이스 호출 없이 캐시에서 직접 데이터 검색).

  • 행동 양식: FromCacheOnly(), FromCacheOnlyAsync()

    • FromCacheOnly(): 캐시에서만 쿼리 결과를 가져오고 데이터베이스에는 쿼리를 실행하지 않으므로 미리 로드된 데이터세트에 대한 초고속 조회가 가능합니다. 하지만 이 기능을 효과적으로 사용하려면 쿼리 정확도를 유지하기 위해 전체 데이터세트를 캐시해야 합니다.

      var resultSet = (from cust in context.Customers
      	where cust.CustomerId == someCustomerId
      	select cust).FromCacheOnly();

직접 API 액세스를 위한 캐시 핸들

NCache EF Core 확장 메서드에만 의존하지 않고 캐시된 엔터티를 효율적으로 관리하기 위한 직접 API를 제공합니다. 개발자는 캐싱 API를 통해 프로그래밍 방식으로 캐시에 객체를 삽입, 업데이트 및 제거할 수 있으며, 이를 통해 고성능 애플리케이션을 위한 데이터 검색을 최적화하는 동시에 캐싱 동작을 세부적으로 제어할 수 있습니다.

  • 캐시에서 엔터티를 직접 삽입, 제거 및 업데이트합니다.

    ICache cache = CacheManager.GetCache(cacheName);
    // Inserting an entity into cache
    cache.Insert(customerKey, cacheItem);

EF Core를 위한 고급 캐싱 기능

집계에 대한 지연된 쿼리 실행

지연된 쿼리 실행을 통해 애플리케이션은 다음과 같은 집계 함수를 수행할 수 있습니다. 세다(), 합집합()예산 및 평균() 데이터베이스를 반복적으로 쿼리하는 대신 캐시된 데이터에서 직접 처리합니다. 이 기능은 개수 및 합계와 같은 집계 작업을 메모리 캐시 내에서 직접 실행함으로써 대규모 데이터 세트를 클라이언트로 가져오는 데 필요한 네트워크 오버헤드를 제거합니다. 이를 통해 중복 쿼리가 줄어들고 성능이 향상되며 트랜잭션이 많은 환경에서 데이터 검색 속도가 빨라집니다.

  • 다음과 같은 집계된 쿼리 결과의 캐싱을 활성화합니다. 세다(), 합집합()예산 및 평균().
  • 계산 결과를 캐싱하여 중복된 데이터베이스 호출을 줄입니다.
    using (var context = new NorthwindContext())
    {
       var resultSet  = context.Products
         .Where(p => p.UnitPrice == 10)
    	  .GroupBy(p => p.ProductName)
    	  .Select(group => group.Key)
    	  .FromCache(out cacheKey, options)
    	  .ToList();
    }

LINQ-to-Cache: 캐시에서 직접 LINQ 쿼리 실행

NCache 애플리케이션이 캐시된 데이터에 대해 직접 LINQ 쿼리를 실행할 수 있도록 하여 반복적인 데이터베이스 쿼리를 수행할 필요가 없습니다. 메모리 내 처리를 활용함으로써 이러한 접근 방식은 쿼리 성능을 크게 향상시키고 데이터베이스 부하를 줄입니다. 데이터베이스에 접근하지 않고도 캐시된 데이터에 대해 직접 LINQ 쿼리를 실행할 수 있습니다.

using (var context = new NorthwindContext())
{
    var result = context.Customers
        .Where(b => (b.CompanyName.Contains("Alfreds Futterkist")))
        .FromCacheOnly()
}

캐싱 옵션: 캐시 전략 미세 조정

NCache 개발자가 애플리케이션 요구 사항에 따라 캐시 동작을 사용자 정의할 수 있는 캐싱 옵션을 제공합니다. 이를 통해 데이터 스토리지를 더 잘 제어하고, 만료 정책을 설정하고, 자동 무효화를 위한 SQL 종속성 추적을 활성화하고, 효율적인 검색을 위해 캐시에 데이터를 저장하는 방법을 정의할 수 있습니다.

  • 제품 카탈로그와 같은 정적 데이터에는 절대 만료 방식을, 활성 세션에는 슬라이딩 만료 방식을 적용하여 캐시 동작을 제어하고, 데이터가 사용되는 동안에만 사용 가능하도록 보장합니다.
  • SQL 종속성 추적을 지원하여 해당 데이터베이스 행이 수정될 때마다 캐시 항목을 자동으로 무효화함으로써 오래된 데이터 문제를 해결합니다.
    var options = new CachingOptions
    {
        QueryIdentifier = "CustomerEntity",
        CreateDbDependency = true,
        StoreAs = StoreAs.SeperateEntities,
        Priority = Runtime.CacheItemPriority.High
    };
    options.SetAbsoluteExpiration(DateTime.Now.AddSeconds(20));

내장 로깅 및 모니터링

NCache 캐시 사용량을 추적하고, 성능 지표를 측정하고, 잠재적 문제를 실시간으로 감지하는 기본 로깅 및 모니터링 기능이 포함되어 있습니다. Microsoft.Extensions.Logging과 완벽하게 통합되어 개발자가 캐시 동작을 분석하고, 문제를 해결하고, 성능을 효율적으로 최적화할 수 있습니다.

  • 캐시된 EF Core 작업에 대한 실시간 모니터링을 제공합니다.
  • Microsoft.Extensions.Logging과 완벽하게 통합되어 자세한 로그를 제공합니다.

시작하기 NCache

설치 NCache EF Core용 클라이언트

  • NuGet을 사용하여 필요한 패키지를 설치하세요.
    Install-Package EntityFrameworkCore.NCache

설치 NCache 서버

  • 설치 NCache 두 대의 서버를 이용해 분산 캐싱 클러스터를 생성합니다.
  • 2노드 구성 NCache 클러스터 NCache 관리센터.

구성 NCache EF 코어에서

  • 추가 NCache DbContext에 대한 구성입니다. 아래 구성은 복원력 있는 연결을 활성화하여 안정적인 연결을 설정합니다. 연결 재시도이는 애플리케이션과 캐시 클러스터 간의 일시적인 네트워크 오류로 인해 애플리케이션이 충돌하는 것을 방지합니다.
    public partial class NorthwindContext : DbContext
    {
    ...
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
     {
         // Parameters specified in App.config
         string cacheId = ConfigurationManager.AppSettings["CacheId"];
         string connString = ConfigurationManager.AppSettings["ConnString"];
         bool errorEnabled = bool.Parse(ConfigurationManager.AppSettings["ErrorEnabled"]);
         int bulkInsertChunkSize = Int32.Parse(ConfigurationManager.AppSettings["BulkInsertChunkSize"]);
         // Configure cache with connection retries and security
         var options = new CacheConnectionOptions();
         options.RetryInterval = TimeSpan.FromSeconds(3);
         options.ConnectionRetries = 2;
         options.ServerList = new List<ServerInfo>()
         {
             new ServerInfo("20.200.20.XX", 9800)
         };
         // Configure cache with security
         options.UserCredentials = new Credentials("john_smith", "12345");
         NCacheConfiguration.Configure(cacheId, DependencyType.SqlServer, options, errorEnabled, bulkInsertChunkSize);
         optionsBuilder.UseSqlServer(connString);
     }
    }

다음에 무엇을할지?

자주 묻는 질문 (FAQ)

NCache SQL 종속성 및 Oracle 종속성을 사용하여 오래된 데이터 문제를 해결합니다. 활성화되면 NCache 데이터베이스 변경 사항을 추적하고 해당 캐시 항목을 자동으로 무효화하거나 제거하여 캐시와 데이터베이스 간의 데이터 일관성을 보장합니다.

  • 캐시에서() 이 방식은 거래 데이터(예: 고객 주문)에 가장 적합합니다. 먼저 캐시를 확인하고 데이터가 없는 경우에만 데이터베이스를 조회한 후 캐시에 추가합니다.
  • 로드인투캐시() 참조 데이터(예: 제품 카탈로그)에 가장 적합합니다. 전체 데이터 세트를 미리 캐시에 로드하여 후속 쿼리가 매우 빠르고 데이터베이스에 접근하지 않도록 보장합니다.

예. NCache 지연 쿼리 실행을 지원하므로 메모리에 캐시된 데이터에서 집계 함수(개수, 합계, 평균, 최소값, 최대값)를 직접 실행할 수 있습니다. 이를 통해 간단한 계산을 수행하기 위해 대규모 데이터 세트를 클라이언트로 가져오는 네트워크 오버헤드를 제거할 수 있습니다.

일시적인 네트워크 오류 발생 시 애플리케이션 충돌을 방지하려면 다음 기능을 활성화하십시오. 연결 재시도 귀하의 캐시 연결 옵션이 설정은 다음을 구성합니다. NCache 클라이언트가 예외를 발생시키기 전에 연결 실패 시도를 자동으로 재시도하여 애플리케이션의 복원력을 보장합니다.

NCache EF Core를 위한 확장성이 뛰어난 분산형 2차 캐시 역할을 합니다. 단일 서버 메모리로 제한되는 기본 로컬 캐시와 달리, NCache 캐시된 데이터를 서버 클러스터 전체에 분산시켜 메모리 제한이나 데이터 불일치 문제 없이 애플리케이션을 수평적으로 확장할 수 있도록 합니다.

문의하기

전화

+1 214-619-2601 (미국)

© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.