EF(Entity Framework) Core는 .NET Core 응용 프로그램. 매우 가볍고 확장 가능하며 크로스 플랫폼입니다.
그러나 높은 거래 .NET Core 응용 프로그램 EF 코어 페이스 퍼포먼스 최대 부하에서 데이터베이스 계층의 확장성 병목 현상이 발생합니다. 애플리케이션 서버를 추가하여 애플리케이션 계층을 선형으로 확장할 수 있지만 확장하기 위해 데이터베이스 서버를 더 추가할 수는 없기 때문입니다.
그러나 다음과 같은 분산 캐시를 사용하는 경우 NCache 귀하의 .NET Core 이러한 응용 프로그램을 빠르게 제거할 수 있습니다. 성능 및 확장성 병목 현상 극단적인 트랜잭션 로드를 처리합니다.
확장 메서드는 파생 클래스를 만들지 않고도 기존 클래스와 형식을 확장할 수 있는 C#의 기능입니다. 확장 메서드는 특수한 종류의 정적 메서드이지만 확장 클래스의 인스턴스 메서드인 것처럼 호출됩니다.
NCache 확장 방법을 통해 EF Core에 캐싱 기능을 통합했습니다. 이것은 사용 NCache 안에서 EF 핵심 애플리케이션 매우 간단하고 간단합니다. 다음은 에서 제공하는 EF Core 확장 방법 목록입니다. NCache.
EF Core에서 캐시하는 가장 일반적인 데이터는 트랜잭션 데이터입니다. 이것은 런타임에 생성되는 자주 변경되는 데이터(예: 고객, 계정, 활동 등)이며 애플리케이션이 여러 번 읽는 동안 짧은 시간 동안만 캐시합니다.
FromCache() 확장 메서드를 사용하면 결과 집합을 캐싱하여 트랜잭션 데이터를 캐싱할 수 있습니다. LINQ 쿼리. 아래 예제를 참조하십시오.
//Load suppliers into the cache with the expiration options
IEnumerable<Suppliers> suppliers = (from supplier in database.Suppliers
where supplier.SupplierId < 10
select supplier).FromCache(options);
여기에서 이 데이터를 가져오기 위해 데이터베이스로 이동하기 전에 FromCache() 메서드가 이 데이터의 캐시를 확인합니다. 찾으면 캐시에서 반환합니다. 그렇지 않으면 데이터베이스에서 가져오고 다음에 캐시할 수 있도록 먼저 캐시한 다음 호출자에게 결과를 반환합니다.
전체 컬렉션을 캐시의 한 항목으로 캐싱하거나 모든 엔터티를 분리하여 별도로 캐시할 수 있는 옵션이 있습니다. 이러한 항목을 개별적으로 가져오거나 업데이트하려는 경우에도 분리가 유용합니다. 아래는 이 메서드의 비동기 버전입니다.
//Load suppliers into the cache with the expiration options asynchronously
Task<IEnumerable><Suppliers> suppliersTask = (from supplier in database.Suppliers
where supplier.SupplierId < 10
select supplier).FromCacheAsync(options);
suppliersTask.Wait();
IEnumerable<Suppliers> suppliers = suppliersTask.Result.ToList();
참조 데이터는 완전히 캐시해야 하는 것입니다. 이것은 당신이 실행할 수 있습니다 LINQ 쿼리 캐시에만 있고 데이터베이스로 이동하지 마십시오. 캐시에 전체 데이터 세트가 없는 경우 LINQ 쿼리 결과는 캐시만 확인하고 전체 데이터 세트가 캐시에 있다고 가정하기 때문에 올바르지 않습니다.
LoadIntoCache() 확장 메서드를 사용하면 모든 참조 데이터로 EF Core 캐시를 채울 수 있습니다. 캐시를 채우는 방법은 아래 예를 참조하세요.
//Load ALL products into the cache as reference data
IEnumerable<Products> products = (from product in database.Products
select product)
.LoadIntoCache(out string cacheKey, options);
모든 참조 데이터가 있는 캐시를 로드한 후에는 데이터베이스 대신 LINQ 쿼리를 실행할 수 있습니다. 이렇게 하면 데이터베이스에 대한 부담이 줄어들고 애플리케이션 성능과 확장성이 향상됩니다. 아래 예를 참조하십시오.
//Query for discontinued products from the reference data cache
IEnumerable<Products> products = (from product in database.Products
where product.Discontinued == true
select product).FromCacheOnly();
EF Core 참조 데이터 캐시에는 전체 데이터 세트(예: 이 경우 제품)가 포함되어야 합니다. 그렇지 않으면 FromCacheOnly() 확장 메서드는 데이터베이스를 확인하지 않으므로 캐시에 있는 것만 반환합니다. 그리고 이것은 정확하지 않을 수 있습니다.
EF Core에서 엔터티를 변경할 때마다 "캐시" 핸들을 얻고 적절한 업데이트 메서드를 호출하여 EF Core 캐시를 업데이트할 수 있습니다. 아래는 예시입니다.
// Initialize the database context
NorthwindContext database = new NorthwindContext();
...
// Add some new entities to the database
database.Shippers.Add(shipperPandaExpress);
database.Shippers.Add(shipperTitanic);
database.SaveChanges();
Cache cache = database.GetCache();
cache.Insert(shipperPandaExpress, out cacheKey, options);
cache.Insert(shipperTitanic, out cacheKey, options);
//By obtain a Cache class handle, you can directly add, update, or remove entities from EF Core. And, then updated data shows up in your LINQ queries. This gives you a lot more control over updating entities when your modifying data yourself. Below is the interface of Cache class.
namespace Alachisoft.NCache.EntityFrameworkCore
{
public class Cache
{
public void Insert(object entity, out string cacheKey, CachingOptions options);
public void Remove(object entity);
public void Remove(string cacheKey);
public void RemoveByQueryIdentifier(Tag tag);
}
}
Entity Framework Core는 캐싱 프레임워크(예: 최대 절전 모드 하다). 하지만, NCache 은(는) 매우 유연하고 강력하면서도 매우 간단한 캐싱 프레임워크를 개발했습니다. 다음과 같은 이유로 사용해야 합니다.
모든 세부 사항을 참조하십시오 NCache 기능 판 비교 페이지. 에 대해 자세히 알아보기 NCache 전체 작동 30일 평가판을 다운로드하십시오. NCache 아래 링크에서.