오늘날 많은 데이터베이스 호출에 의존하는 대부분의 사용자 애플리케이션은 더 나은 성능과 선형 확장성을 위해 분산 캐싱을 통합하고 있습니다. 이를 위해 사용자는 데이터베이스에 변경 사항이 발생할 때마다 변경 사항이 캐시에도 즉시 반영되기를 원할 것입니다. NCache 메모리 내 분산 캐시이므로 캐시에서 데이터를 최신 상태로 유지하기 위해 유사한 목적으로 다양한 기술을 제공합니다.
첫째, NCache 제공 만료 여기서 데이터는 미리 정의된 간격 후에 캐시에서 자동으로 제거됩니다. 둘째, 다음과 같은 전략이 있습니다. 데이터베이스에 대한 캐시 종속성 캐시의 데이터는 데이터베이스와 동기화된 상태로 유지되며 변경될 때마다 무효화됩니다. 마찬가지로 또 다른 메커니즘이 있습니다. 캐시 리프레셔 이는 예약된 간격으로 백그라운드에서 실행되며 제어된 방식으로 데이터를 최신 상태로 유지하고 업데이트합니다.
이 블로그는 Cache Refresher의 다양한 전략과 캐시에서 데이터를 최신 상태로 유지하는 방법에 대해 설명합니다.
NCache 세부 정보 만료 문서 캐시 로더 및 리프레셔
캐시 리프레셔: 개요 및 개념
사용자가 비디오 스트리밍 채널을 실행하고 캐시의 해당 비디오와 함께 일부 새로운 정보를 캐시했다고 가정해 보겠습니다. 더 오랜 기간 동안 캐시의 비디오는 변경되지 않은 상태로 유지되지만 이제 어떤 이유로 특정 새 비디오가 추가되고 다른 비디오는 데이터베이스에서 업데이트됩니다. 이로 인해 사용자는 이미 업데이트된 오래된 비디오(오래된 데이터)를 보게 됩니다.
NCache 제공 캐시 리프레셔 특정 새로 고침 간격으로 새로 고쳐 캐시의 데이터를 최신 상태로 유지하는 기능. 캐시 데이터 새로 고침에는 데이터 원본에서 데이터가 변경될 때마다 추가, 업데이트 및 제거가 포함됩니다.
캐시 새로 고침을 구성하려면 사용자가 먼저 구현해야 합니다. 캐시 시작 로더. 이 로더는 병렬 처리를 달성하기 위해 서로 다른 유형의 데이터를 함께 그룹화하는 방법을 나타내는 데이터 세트의 형태로 캐시 시작 시 캐시에 데이터를 미리 로드하는 데 사용됩니다. 캐시가 시작될 때마다 캐시 로더는 구성된 데이터 세트에 대해 데이터 소스에서 데이터를 자동으로 가져옵니다. 미리 로드된 이 데이터를 최신 상태로 유지하고 데이터 소스의 업데이트된 데이터와 동기화하기 위해 예약된 시간 간격 후에 이러한 데이터 세트를 개별적으로 새로 고치는 캐시 새로 고침이 사용됩니다.
캐시 리프레셔의 다른 속성
구현을 시작하기 전에 사용자가 알아야 하는 Cache Refresher의 몇 가지 속성이 있습니다. 아래에 유의해야 할 세부 정보가 설명되어 있습니다.
- 데이터 세트 : 데이터 세트는 사용자가 다른 유형의 데이터를 그룹화하여 병렬 처리를 달성하기 위해 다른 간격 또는 이벤트에서 별도로 로드하거나 새로 고칠 수 있는 방법입니다.
- 데이터 세트 예약: 데이터 세트는 데이터 세트 일정에 따라 새로 고쳐집니다. 이 일정은 다음과 같습니다. 일일 시간, 일일 간격, 주간 및 월간 회원. 이들 모두는 고유한 구현에서 데이터 세트를 새로 고쳐야 하는 정확한 시간을 결정합니다. 각 데이터 세트에는 고유한 새로 고침 일정이 있을 수 있습니다. 예를 들어 데이터 세트에 관한 비디오 새로 고침 베이커리 제품 매월 매주 일요일 정오. 자세한 내용은 다음을 참조하십시오. 문서에서 데이터 세트 예약.
- 새로 고침 간격: 예약된 시간이 되면 새로 고칠 준비가 된 데이터 세트를 확인하기 위해 스레드가 실행되는 간격입니다. 각 데이터 세트에는 예약된 새로 고침 간격이 다르지만 이 간격은 캐시 수준에서 동일하게 유지됩니다. 이 간격은 각각 최소 15분 및 최대 60분으로 설정할 수 있습니다.
캐시 리프레셔를 구현하는 방법?
Cache Refresh로 구현하려면 먼저 사용자가 다음을 구성해야 합니다. ICacheLoader 상호 작용. 둘째, NCache 구현된 LoadDatasetOnStartup 메서드를 호출하여 데이터를 캐시에 로드합니다. 그런 다음 RefreshDataset 메서드를 사용하여 캐시 로더가 캐시에 로드한 데이터를 새로 고칩니다.
사용자가 데이터베이스에 두 개의 비디오를 가지고 있다고 가정해 보겠습니다. 하나는 베이커리 제품을 재평가하고 다른 하나는 의류 제품입니다.. 다음 구현은 비디오를 캐시에 미리 로드한 다음 모든 업데이트에 대해 별도의 새로 고침 간격으로 데이터를 새로 고칩니다.
캐시 및 연결 초기화
연결을 구성하기 위해 캐시 시작 시 Init 메서드가 호출됩니다. 아래는 초기화 ICacheLoader 인터페이스의 메소드. 여기서 우리는 SQL 연결을 열고 사용자가 지정한 이름으로 캐시를 초기화합니다.
1 2 3 4 5 6 7 8 |
public void Init(IDictionary<string, string> parameters, string cacheName) { string connectionString = parameters["connectionString"] as string; connection = new SqlConnection(connectionString); connection.Open(); cache = CacheManager.GetCache(cacheName); } |
캐시에 데이터 세트 로드
두 번째 단계에서 사용자는 다음을 사용합니다. LoadDatasetOnStartup, 캐시를 미리 채우기 위해 데이터베이스에서 캐시로 지정된 데이터 세트를 로드하기 위해 캐시 시작 시 호출되는 메서드입니다.
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 |
public object LoadDatasetOnStartup(string dataset) { // Create a list of datasets to load at cache startup IList<object> datasetToLoad; switch (dataSet.ToLower()) { // If dataset is "products", fetch products from data source to load in cache case "products": datasetToLoad = FetchProductsFromDataSource(); // Insert fetched product in the cache foreach (var product in datasetToLoad) { string key = $"ProductID:{product.Id}"; cache.Insert(key, product); } break; default: // Invalid dataset } // User context is the time at which datasets were loaded in the cache object userContext = DateTime.Now; return userContext; } |
로드된 데이터 세트 새로 고침
셋째, 주기적 간격으로 데이터 세트를 새로 고치려면 사용자가 구현을 제공해야 합니다. 새로 고침 데이터 세트. 여기에서 사용자는 캐시 로더에 의해 로드된 이미 사전 로드된 데이터를 업데이트하거나 새 데이터를 추가하거나 특정 데이터 세트에서 데이터를 제거해야 합니다.
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 |
public object RefreshDataset(string dataset, object userContext) { *DateTime? lastRefreshTime; switch (dataset.ToLower()) { // If dataset is "bakery products", fetch updated products from data source case "bakery products": lastRefreshTime = userContext as DateTime?; IList<Product> productsToRefresh = FetchUpdatedProducts(lastRefreshTime) as IList<Product>; // Insert updated products in the cache foreach (var product in productsToRefresh) { string key = $"ProductID:{product.Id}"; CacheItem cacheItem = new CacheItem(product); _cache.Insert(key, cacheItem); } break; default: // Invalid dataset } // User context is the time at which datasets were refreshed userContext = DateTime.Now; return userContext; } |
투표 기반 리프레셔 구현
이제 방법이 나옵니다 새로고침할 데이터 집합 가져오기, 새로 고침 간격마다 호출되며 사용자가 고유한 사용자 지정 논리를 사용하여 로드된 여러 데이터 세트의 새로 고침 시간을 제어하려는 경우에만 제공되어야 합니다. 반환된 데이터 세트는 즉시 또는 말한 대로 같은 날에 새로 고쳐집니다.
요청 시 데이터 세트 새로 고침
마지막으로 사용자는 다음을 통해 런타임에 미리 구성된 데이터 세트를 새로 고칠 수 있는 옵션도 있습니다. 호출-RefreshDataset cmdlet.cmdlet입니다. 여기에서 데이터 세트는 다음을 사용하여 즉시 또는 다음 24시간 이내에 새로 고칠 수 있습니다. RefreshPreference
옵션. 데이터 세트 제품이 즉시 새로 고쳐지는 예가 아래에 나와 있습니다. demoClusteredCache
서버 20.200.20.11에서.
1 |
Invoke-RefresherDataset -CacheName demoClusteredCache -Server 20.200.20.11 -Dataset product -RefreshPreference RefreshNow |
다음을 통해 캐시 로더 및 리프레셔 구성 NCache 웹 관리자
사용자가 Cache Startup Loader 및 Refresher를 구현한 후에는 Web Manager를 통해 구성하고 요구 사항에 따라 새로 고침 간격을 설정할 수 있습니다. 다음은 수행 방법입니다.
블로그를 마칩니다!
마지막으로 지금까지 논의된 모든 내용은 캐시를 효율적으로 업데이트해야 하며 캐시 새로 고침이 이를 수행하는 가장 좋은 방법임을 알려줍니다. 매우 체계적인 방식으로 데이터베이스에 변경 사항이 발생하면 캐시 데이터를 업데이트합니다. 캐시 리프레셔와 마찬가지로 NCache 불편함 없이 수행할 수 있는 많은 흥미로운 기능을 제공합니다. 자세한 내용은 저희 웹 사이트를 확인하십시오!