오늘날 웹 애플리케이션은 값비싼 데이터베이스 여행을 줄이기 위해 자주 사용하는 데이터를 캐싱하여 성능과 확장성을 향상시키기 위해 분산 캐시를 점점 더 많이 사용하고 있습니다. 분산 캐시는 여러 캐시 서버에 걸쳐 확장되고 동기화되어 선형 방식으로 확장할 수 있습니다. 좋은 분산 캐시에는 일반적으로 변경에 의존하는 항목이 있을 때 캐시된 항목을 만료할 수 있는 캐시 종속성 기능이 있습니다. 캐시 종속성은 키 기반, 파일 기반 또는 데이터베이스 기반일 수 있습니다. 따라서 본질적으로 캐시된 항목이 캐시의 다른 항목(키 기반), 파일 시스템의 파일(파일 기반) 또는 SQL Server 데이터베이스(데이터베이스 -기반을 둔). 그리고 이러한 소스의 데이터가 변경되면 "종속성이 만료되었으므로" 캐시된 항목이 캐시에서 자동으로 제거됩니다. 이를 통해 캐시된 데이터를 항상 정확하고 최신 상태로 유지할 수 있습니다.
이것은 모두 훌륭하지만 캐시된 항목이 위에서 언급한 것과 다른 데이터 소스의 데이터에 종속되도록 하려면 어떻게 해야 할까요? 예를 들어 데이터 변경 사항을 제공하는 RSS 피드(Rich Site Summary)가 있을 수 있습니다. 그리고 이 피드를 읽을 수 있는 자체 프로그램이 있고 RSS 피드에서 보는 데이터 변경 사항을 기반으로 캐시된 특정 항목을 만료하려고 합니다. 데이터 소스가 "커스텀"인 유사한 상황이 많이 있습니다. 따라서 이러한 상황을 처리하기 위해 우수한 분산 캐시는 사용자 지정 데이터 원본의 데이터가 변경될 때 만료될 수 있도록 캐시된 항목에 대해 고유한 사용자 지정 캐시 종속성을 구현할 수 있는 유연성을 제공해야 합니다.
NCache 그러한 제공 사용자 지정 캐시 종속성 기능. NCache 모든 종류의 .NET 애플리케이션을 위한 강력한 분산 캐시입니다. 그리고, NCache 사용자 정의 종속성을 구현할 수 있습니다. 다음을 사용하여 사용자 지정 종속성을 얼마나 쉽게 구현할 수 있는지 보여 드리겠습니다. NCache 아래에. 취해야 할 단계는 다음과 같습니다.
- 다음을 사용하여 추가 Alachisoft.NCache.런타임.종속성; 사용자 지정 종속성 구현에 대한 참조입니다.
- NCache 모든 종속성의 기본 클래스인 ExtensibleDependency라는 확장 가능한 추상 클래스를 제공합니다. ExtensibleDependency에서 사용자 지정 종속성 클래스를 상속한 다음 HasChanged 속성을 재정의하기만 하면 됩니다. 이 속성이 true를 반환하면 항목 종속 항목보다 캐시에서 만료됩니다.
다음은 지정된 제품의 사용 가능한 단위가 100개 미만인 경우 종속성 변경이 트리거되는 사용자 지정 종속성 구현의 전체 예입니다.
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
using Alachisoft.NCache.Runtime.Dependencies; [Serializable] public class CustomDependency : ExtensibleDependency { private string _connString; private int _productID; public override bool Initialize(){ return false; } public CustomDependency(int productID, string connStr) { _connString = connStr; _productID = productID; } internal bool DetermineExpiration() { if (GetAvailableUnits(_productID) < 100) return true; return false; } internal int GetAvailableUnits(int productID) { OleDbDataReader reader=null; OleDbConnection connection= new OleDbConnection(_connString); connection.Open(); int availableUnits=-1; try { OleDbCommand cmd = connection.CreateCommand(); cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "Select UnitsInStock From Products" + " where ProductID = {0}", productID); reader = cmd.ExecuteReader(); if (reader.Read()) { availableUnits = Convert.ToInt32(reader["UnitsInStock"].ToString()); } reader.Close(); return availableUnits; } catch (Exception) { return availableUnits; } } public override bool HasChanged { get { return DetermineExpiration(); } } } |
- 사용자 지정 종속성을 구현하고 다음을 사용하여 배포한 후 NCache 서비스를 사용하려면 필요할 때마다 애플리케이션의 종속 캐시 항목에 이 종속성을 등록하기만 하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using Alachisoft.NCache.Web.Caching; //add namespace //Add following code in your application Cache _cache = NCache.InitializeCache("myCache"); string connString = "Provider=SQLOLEDB;Data Source=localhost; User ID=sa;password=;Initial Catalog=Northwind"; CustomDependency hint = new CustomDependency(123, connString); _cache.Add("Product:1001", "Value", new CacheDependency(hint), Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 10), Alachisoft.NCache.Runtime.CacheItemPriority.Default); |
이제 사용자 지정 데이터 소스의 데이터가 변경되면 NCache 캐시에서 종속 캐시된 항목을 자동으로 만료합니다. NCache 사용자 지정 종속성 코드를 실행하는 책임이 있으므로 별도의 프로그램을 구현하고 신뢰할 수 있는 프로세스에서 호스팅하는 것에 대해 걱정할 필요가 없습니다. 응용 프로그램 특정 시나리오에 대해 시도하고 탐색하십시오.