분산 캐시 환경에서는 응용 프로그램이 실행을 시작한 직후에 사용할 수 있도록 특정 데이터가 캐시에 있어야 하는 시나리오가 있을 수 있습니다. 처음에는 캐시가 시작될 때 데이터를 가져오기 위해 값비싼 데이터 소스 이동을 유발하여 애플리케이션 성능에 영향을 줄 수 있는 데이터가 포함되어 있지 않습니다. 따라서 데이터를 저장하는 데 사용되는 캐시에 응용 프로그램이 사용하기 전에 일부 참조 데이터가 미리 로드되는 것이 중요해집니다.
이 목적을 위해, NCache 를 제공합니다 캐시 시작 로더 캐시가 시작되는 즉시 사용자가 원하는 참조 데이터를 캐시에 미리 로드하는 인터페이스를 구현할 수 있는 기능입니다. 결과적으로 사용자 애플리케이션에는 캐시 누락이 없고 데이터 소스 트립이 줄어들어 더 빠른 성능을 얻을 수 있습니다.
캐시 시작 로더의 구성 요소
캐시가 시작될 때마다 캐시 시작 로더는 사용자가 미리 사용할 수 있도록 데이터 소스에서 데이터를 자동으로 가져옵니다. 따라서 캐시 로더의 작동 방식으로 넘어가기 전에 사용자는 아래에서 설명하는 몇 가지 특성에 대해 알아야 합니다.
- 데이터 세트 : 데이터 세트는 사용자가 다른 유형의 데이터를 그룹화하여 병렬 처리를 달성하기 위해 다른 간격 또는 이벤트에서 별도로 로드하거나 새로 고칠 수 있는 방법입니다.
- 로더 서비스: 시작 시 작업을 관리하고 데이터 소스에서 캐시로 데이터를 로드하는 일을 담당합니다.
- 캐시 로더 재시도: 캐시를 로드하는 동안 작업이 실패하는 경우 를 통해 구성된 재시도 횟수 옵션을 통해 다음 작업으로 이동하기 전에 실패한 작업을 다시 수행할 수 있습니다. NCache 웹 관리자.
NCache 세부 정보 캐시 로더 및 리프레셔 문서 NCache 기술 문서
캐시 시작 로더를 구현하는 방법은 무엇입니까?
캐시 시작 로더를 활성화하려면 사용자는 우선 다음을 구현해야 합니다. ICacheLoader 인터페이스. NCache 캐시 시작 시 캐시의 데이터 소스에서 데이터를 로드하기 위해 아래에 설명된 방법과 함께 이 인터페이스를 사용합니다.
캐시 시작 로더 초기화
초기화 이 메서드는 구성된 매개변수를 전달하기 위해 캐시 시작 시 호출되어 사용자가 그에 따라 캐시와 데이터 소스를 초기화하는 데 사용할 수 있습니다. SQL과 같은 데이터베이스 연결을 열어 연결을 구성하고 .NET 및 Java에 대한 아래 샘플 구현과 같이 지정된 이름으로 캐시를 초기화합니다.
1 2 3 4 5 6 7 8 9 |
public void Init(IDictionary<string, string> parameters, string cacheName) { cache = CacheManager.GetCache(cacheName); connectionString = parameters.ContainsKey("ConnectionString") ? parameters["ConnectionString"] : null; if (connectionString != null) { connection = new SqlConnection(connectionString); } } |
1 2 3 4 5 6 7 8 |
public void init(Map<String, String> parameters, String cacheName) { cache = CacheManager.getCache(cacheName); connectionString = parameters.containsKey("ConnectionString") ? parameters.get("ConnectionString") : null; if (connectionString != null) { connection = DriverManager.getConnection(connectionString); } } |
캐시 시작 시 데이터 로드
메소드의 .NET 및 Java에 대한 다음 샘플 구현 LoadDatasetOnStartup of ICacheLoader
인터페이스는 데이터 소스에서 데이터를 가져와 캐시 시작 시 캐시에 추가하여 캐시를 미리 로드합니다. 캐시에 로드된 데이터에 대한 정보를 보유하는 사용자 컨텍스트를 반환합니다.
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; // You can add more cases for different datasets as per requirement and fetch them from the data source 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 |
public Object loadDatasetsOnStartup(String dataset) { // Create a list of datasets to load at cache startup List<Object> datasetToLoad; switch (dataset.toLowerCase()) { // If dataset is "products", fetch products from data source and add in cache case "products": datasetToLoad = fetchProductsFromDataSource(); // Insert fetched product in the cache for (var product : datasetToLoad) { string key = "ProductID:" + product.productID; cache.insert(key, product); } break; // You can add more cases for different datasets as per the requirement and fetch them from data source default: // Invalid dataset } // User context is the time at which datasets were loaded in the cache Object userContext = LocalDateTime.now(); return userContext; } |
데이터를 미리 로드하는 것이 중요한 것처럼 로드된 데이터가 오래될 가능성이 매우 큽니다. 캐시에 이미 로드된 데이터는 데이터 소스에서 발생하는 변경으로 인해 변경될 수 있으므로 사전 로드된 데이터가 부실해질 수 있습니다. 이 로드된 데이터를 최신 상태로 유지하려면 NCache 의 기능을 제공합니다 캐시 리프레셔 로드된 데이터를 최신 상태로 유지하고 데이터 소스와 동기화하기 위해 캐시 로더 구현을 사용합니다.
NCache 세부 정보 캐시 로더 및 새로 고침 구성 캐시 리프레셔 문서
다음을 통해 캐시 로더 구성 NCache 웹 관리자
사용자가 캐시 시작 로더를 구현하면 다음을 통해 구성할 수 있습니다. NCache 웹 관리자. 아래는 수행할 수 있는 방법입니다.
결론!
당신이 볼 수 있듯이, NCache 사용자에게 수동 후속 조치 대신 캐시에 데이터를 미리 로드할 수 있는 강력한 기능인 캐시 시작 로더를 제공합니다. 그래서, 잡아 NCache 더 빠른 애플리케이션 성능과 확장성을 위한 모든 놀라운 기능을 확보하십시오!