Configuração e implementação do provedor de cache write-through
Para usar o cache Write-through, você precisa implementar o IWriteThruProvider
interface para .NET e o WriteThruProvider
interface para Java. NCache usará essa implementação personalizada para gravar dados na fonte de dados. Por favor consulte Configurando o cache write-through no Guia do administrador para mais detalhes.
Aviso
Se o provedor de cache Write-through estiver especificado em cliente.ncconf no default-writethru-provider
tag e também por meio da API, o provedor na API substituirá o especificado em cliente.ncconf.
importante
Para Java, antes de implantar seus arquivos JAR, você precisa certificar-se de que:
- JDK 17 está instalado.
- A variável de ambiente para Java está definida.
Pré-requisitos
- Para aprender sobre os pré-requisitos padrão necessários para trabalhar com todos os NCache recursos do lado do servidor, incluindo cache Write-Through, consulte a página fornecida em Pré-requisitos da API do lado do servidor.
- Este deve ser um projeto de biblioteca de classes usando o Microsoft Visual Studio.
- Tenha certeza de Implantar provedor WriteThrough usando o NCache Centro de Gestão.
- Para detalhes da API, consulte: IWriteThruProvider, WriteToDataSource.
Note
In NCache, Os provedores write-through são configurados no nível do cache, ou seja, para caches clusterizados, todos os nós conterão configurações do provedor e seus assemblies implementados.
Implementação de amostra
O exemplo de código a seguir fornece exemplos de implementação para IWriteThruProvider
interface para .NET e WriteThruProvider
para Java respectivamente. o WriteToDataSource
contém lógica para executar uma operação de gravação em uma fonte de dados configurada. Usando isso, você pode gravar objetos, objetos em massa e tipos de dados do cache na fonte de dados.
Depois de implementar e implantar este provedor, você pode fazer chamadas diretas para NCache para operações de gravação na fonte de dados. NCache utiliza o WriteToDataSource
método na classe de acesso a dados especificada para gravar operações na fonte de dados.
// 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
}
Note
Para garantir que a operação seja à prova de falhas, é recomendável lidar com possíveis exceções em seu aplicativo, conforme explicado em Como lidar com falhas.
Recursos adicionais
NCache fornece um aplicativo de exemplo para Write-through em GitHub.
Veja também
.INTERNET: Alachisoft.NCache.Tempo de execução espaço para nome.
Java: com.alachisoft.ncache.runtime.datasourceprovider espaço para nome.