분산 캐싱은 .NET 애플리케이션 성능과 확장성을 향상시키는 널리 사용되는 방법이 되었습니다. 이것이 개발자들이 분산 캐시에 점점 더 많은 데이터를 캐싱하는 이유입니다. 그러나 이것과 함께 몇 가지 도전이 따릅니다. 한 가지 중요한 과제는 캐시의 데이터가 항상 데이터베이스와 동기화되도록 하는 것입니다. 이는 캐시가 데이터베이스에 이미 존재하는 데이터의 복사본을 유지하기 때문입니다.
데이터베이스의 동일한 데이터를 업데이트하는 여러 응용 프로그램이 있지만 모든 응용 프로그램이 분산 캐시에 액세스할 수 있는 것은 아닌 경우 캐시의 데이터가 더 오래되고 데이터베이스의 데이터와 다른 상황이 발생하게 됩니다. 그리고 일부 참조 유형의 데이터에는 이것이 괜찮을 수 있지만 트랜잭션 데이터에는 확실히 허용되지 않습니다. 참조 데이터는 많이 읽지만 자주 수정하지 않는 데이터(예: 제품 카탈로그)인 반면 트랜잭션 데이터는 자주 읽고 수정하는 데이터(예: 고객 또는 계정 데이터)입니다.
NCache 세부 정보 캐시 종속성 문서 NCache 기술 문서
분산 캐시가 데이터베이스와 동기화된 상태를 유지하도록 하려면 어떻게 해야 합니까?
대답은 SqlCacheDependency
. ASP.NET Cache(System.Web.Caching)의 일부이며 SQL 문으로 데이터베이스의 데이터 세트를 지정한 다음 데이터베이스에서 데이터 세트가 수정될 때마다 SQL Server 2005/2008에서 .NET 이벤트 알림을 받을 수 있습니다. .
NCache 내부 통합했습니다 SqlCacheDependency
목적을 위해 SQL Server 2005/2008 또는 Oracle 데이터베이스와 캐시 동기화. 당신에게, NCache 캐시된 항목을 구성하는 주어진 테이블에서 하나 이상의 행을 나타내는 SQL 문을 지정할 수 있는 SqlDependency라는 유사한 인터페이스를 제공합니다. NCache 그런 다음 내부적으로 사용 SqlCacheDependency
이러한 행에 대해 데이터베이스와의 링크를 설정합니다.
따라서 응용 프로그램 중 하나에 의해 데이터베이스에서 데이터가 업데이트되면 SQL Server는 .NET 이벤트 알림을 발생시킵니다. NCache 분산 캐시에서 해당 항목을 잡아 제거합니다. 이렇게 하면 동일한 데이터의 서로 다른 두 복사본이 있는 데이터 불일치 문제가 해결됩니다. 이는 애플리케이션이 다음에 동일한 데이터를 원할 때 캐시에서 해당 데이터를 찾지 못하고 강제로 데이터베이스에서 최신 복사본을 검색하여 캐시하기 때문입니다. 이 방법, NCache 캐시의 데이터가 항상 데이터베이스의 데이터와 일치하도록 합니다.
다음은 SqlDependency를 사용하는 소스 코드 예제입니다. NCache 내부적으로 사용하는 SqlCacheDependency
:
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 47 48 49 50 51 52 |
public class Program { // A standard Load method that loads a single row from database public Customer LoadCustomer(Customer cust) { String key = "Customer:CustomerID:" + cust.CustomerID; Customer cust2 = (Customer)NCache.Cache.Get(key); if (cust2 != null) return cust2; CustomerFactory custFactory = new CustomerFactory(); // Load a single customer from the database // SELECT * FROM Customers WHERE CustomerID = 'ALFKI' custFactory.Load(cust); // Create a SqlCacheDependency for this item CacheItem item = new CacheItem(cust); item.Dependency = SqlDependencyFactory(connectionString, "SELECT CustomerID FROM Customers WHERE CustomerID = '" + cust.CustomerID + "'"); // Store item in the cache along with SqlCacheDependency NCache.Cache.Insert(key, item); return cust; } // A query method public List<Customer> FindCustomers(String city) { String key = "List<Customer>:City:" + city; List<Customer> custList = (List<Customer>)NCache.Cache.Get(key); if (custList != null) return custList; CustomerFactory custFactory = new CustomerFactory(); // Load a list of customers from database based on a criteria // SELECT * FROM Customers WHERE City = 'San Francisco' custList = custFactory.FindByCity(city); // Create a SqlCacheDependency for this list of customers CacheItem item = new CacheItem(custList); item.Dependency = SqlDependencyFactory.(connectionString, "SELECT CustomerID FROM Customers WHERE City = '" + city + "'"); // Store list of customers in the cache along with SqlCacheDependency NCache.Cache.Insert (key, item); return custList; } } |
SQL에 대한 캐시 종속성 Oracle DB 캐시 종속성 사용자 지정 캐시 종속성
요약하면 SqlDependency 기능은 NCache 캐시를 데이터베이스와 동기화하고 데이터 무결성을 유지할 수 있습니다. 이제 캐시에서 오래된 데이터를 사용할 염려 없이 모든 데이터 캐시를 시작할 수 있습니다. 물론 더 많은 데이터를 캐시할수록 애플리케이션 성능과 확장성이 향상됩니다.
따라서 완전히 작동하는 60일 평가판을 다운로드하십시오. NCache Enterprise 그리고 직접 사용해 보세요.