Write-Through 캐시 제공자 구성 및 구현
Write-through 캐싱을 사용하려면 다음을 구현해야 합니다. IWriteThruProvider
.NET용 인터페이스 및 WriteThruProvider
자바용 인터페이스. NCache 이 사용자 정의 구현을 사용하여 데이터 소스에 데이터를 씁니다. 참조하십시오 관리자 가이드에서 연속 쓰기 캐시 구성 자세한 내용은.
경고
Write-through 캐시 공급자가 지정된 경우 클라이언트.ncconf FBI 증오 범죄 보고서 default-writethru-provider
태그 및 API를 통해서도 API의 제공자는 에 지정된 것을 덮어씁니다. 클라이언트.ncconf.
중대한
Java의 경우 JAR 파일을 배포하기 전에 다음을 확인해야 합니다.
- JDK 17 설치되어 있습니다.
- Java용 환경 변수가 설정되었습니다.
사전 조건
- 모든 작업에 필요한 표준 전제 조건에 대해 알아보려면 NCache Write-Through 캐시를 포함한 서버 측 기능은 다음 페이지를 참조하십시오. 서버 측 API 전제 조건.
- 이것은 Microsoft Visual Studio를 사용하는 클래스 라이브러리 프로젝트여야 합니다.
- 에 있는지 확인 WriteThrough 공급자 배포 를 사용하여 NCache 관리센터.
- API 세부 정보는 다음을 참조하세요. IWriteThruProvider, 데이터 소스에 쓰기.
주의 사항
In NCache, Write-through 공급자는 캐시 수준에서 구성됩니다. 즉, 클러스터형 캐시의 경우 모든 노드에는 공급자 구성과 배포된 어셈블리가 포함됩니다.
샘플 구현
다음 코드 샘플은 다음을 위한 샘플 구현을 제공합니다. IWriteThruProvider
.NET용 인터페이스 및 WriteThruProvider
각각 자바용. 그만큼 WriteToDataSource
메서드에는 구성된 데이터 소스에 대한 쓰기 작업을 수행하는 논리가 포함되어 있습니다. 이를 사용하면 캐시의 개체, 대량 개체 및 데이터 유형을 데이터 소스에 쓸 수 있습니다.
이 공급자를 구현 및 배포한 후 다음을 직접 호출할 수 있습니다. NCache 데이터 소스에 대한 쓰기 작업의 경우. NCache 를 사용하여 WriteToDataSource
지정된 데이터 액세스 클래스의 메소드를 사용하여 데이터 소스에 대한 작업을 작성합니다.
// Contains methods used to save/update an object to the master data source.
public class SampleWriteThruProvider : IWriteThruProvider
{
// Object used to communicate with the Data source.
private SqlConnection _connection;
// Perform tasks like allocating resources or acquiring connections
public void Init(IDictionary parameters, string cacheId)
{
try
{
string connString = GetConnectionString(parameters);
if (!string.IsNullOrEmpty(connString))
{
_connection = new SqlConnection(connString);
_connection.Open();
}
}
catch (Exception ex)
{
// Handle exception
}
}
// Perform tasks associated with freeing, releasing, or resetting resources.
public void Dispose()
{
if (_connection != null)
{
_connection.Close();
}
}
//Responsible for write operations on data source
public OperationResult WriteToDataSource(WriteOperation operation)
{
ProviderCacheItem cacheItem = operation.ProviderItem;
Product product = cacheItem.GetValue<Product>();
switch (operation.OperationType)
{
case WriteOperationType.Add:
// Insert logic for any Add operation
break;
case WriteOperationType.Delete:
// Insert logic for any Delete operation
break;
case WriteOperationType.Update:
// Insert logic for any Update operation
break;
}
// Write Thru operation status can be set according to the result.
return new OperationResult(operation, OperationResult.Status.Success);
}
public ICollection<OperationResult> WriteToDataSource(ICollection<WriteOperation> operations)
{
var operationResult = new List<OperationResult>();
foreach (WriteOperation operation in operations)
{
ProviderCacheItem cacheItem = operation.ProviderItem;
Product product = cacheItem.GetValue<Product>();
switch (operation.OperationType)
{
case WriteOperationType.Add:
// Insert logic for any Add operation
break;
case WriteOperationType.Delete:
// Insert logic for any Delete operation
break;
case WriteOperationType.Update:
// Insert logic for any Update operation
break;
}
// Write Thru operation status can be set according to the result
operationResult.Add(new OperationResult(operation, OperationResult.Status.Success));
}
return operationResult;
}
public ICollection<OperationResult> WriteToDataSource(ICollection<DataTypeWriteOperation> operations)
{
var operationResult = new List<OperationResult>();
foreach (DataTypeWriteOperation operation in operations)
{
var list = new List<Product>();
ProviderDataTypeItem<object> cacheItem = operation.ProviderItem;
Product product = (Product)cacheItem.Data;
switch (operation.OperationType)
{
case DatastructureOperationType.CreateDataType:
// Insert logic for creating a new List
IList myList = new List<Product>();
myList.Add(product.ProductID);
break;
case DatastructureOperationType.AddToDataType:
// Insert logic for any Add operation
list.Add(product);
break;
case DatastructureOperationType.DeleteFromDataType:
// Insert logic for any Remove operation
list.Remove(product);
break;
case DatastructureOperationType.UpdateDataType:
// Insert logic for any Update operation
list.Insert(0, product);
break;
}
// Write Thru operation status can be set according to the result.
operationResult.Add(new OperationResult(operation, OperationResult.Status.Success));
}
return operationResult;
}
// Parameters specified in Manager are passed to this method
// These parameters make the connection string
private string GetConnectionString(IDictionary parameters)
{
string connectionString = string.Empty;
string server = parameters["server"] as string, database = parameters["database"] as string;
string userName = parameters["username"] as string, password = parameters["password"] as string;
try
{
connectionString = string.IsNullOrEmpty(server) ? "" : "Server=" + server + ";";
connectionString = string.IsNullOrEmpty(database) ? "" : "Database=" + database + ";";
connectionString += "User ID=";
connectionString += string.IsNullOrEmpty(userName) ? "" : userName;
connectionString += ";";
connectionString += "Password=";
connectionString += string.IsNullOrEmpty(password) ? "" : password;
connectionString += ";";
}
catch (Exception exp)
{
// Handle exception
}
return connectionString;
}
// Deploy this class on cache
}
주의 사항
작업이 안전하도록 하려면 에 설명된 대로 응용 프로그램 내에서 잠재적인 예외를 처리하는 것이 좋습니다. 처리 실패.
추가 자료
NCache Write-through를 위한 샘플 애플리케이션을 제공합니다. GitHub의.
도 참조
.그물: Alachisoft.NCache.실행 시간 네임 스페이스.
자바 : COM.alachisoft.ncache.runtime.datasourceprovider 네임 스페이스.