Configuration et mise en œuvre du fournisseur de cache en écriture directe
Pour utiliser la mise en cache en écriture immédiate, vous devez implémenter le IWriteThruProvider
interface pour .NET et le WriteThruProvider
interface pour Java. NCache utilisera cette implémentation personnalisée pour écrire des données sur la source de données. Prière de se référer à Configuration du cache en écriture directe dans le Guide de l'administrateur pour plus de détails.
Si le fournisseur de cache en écriture directe est spécifié dans client.ncconf dans le default-writethru-provider
balise et également via l'API, le fournisseur dans l'API écrasera celui spécifié dans client.ncconf.
Important
Pour Java, avant de déployer vos fichiers JAR, vous devez vous assurer que :
- JDK 17 est installé.
- La variable d'environnement pour Java est définie.
Pré-requis
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté serveur, y compris le cache en écriture, veuillez vous référer à la page donnée sur Prérequis de l'API côté serveur.
- Il doit s'agir d'un projet de bibliothèque de classes utilisant Microsoft Visual Studio.
- Assurez-vous de Déployer le fournisseur WriteThrough utilisant l' NCache Centre de gestion.
- Pour plus de détails sur l'API, reportez-vous à : IWriteThruProvider, Écrire vers la source de données.
Notes
In NCache, Les fournisseurs d'écriture directe sont configurés au niveau du cache, c'est-à-dire que pour les caches en cluster, tous les nœuds contiendront les configurations de fournisseur et leurs assemblys déployés.
Mise en œuvre de l'échantillon
L'exemple de code suivant fournit un exemple d'implémentation pour IWriteThruProvider
interface pour .NET et WriteThruProvider
pour Java respectivement. Le WriteToDataSource
La méthode contient une logique pour effectuer une opération d’écriture sur une source de données configurée. Grâce à cela, vous pouvez écrire des objets, des objets en masse et des types de données du cache vers la source de données.
Après avoir implémenté et déployé ce fournisseur, vous pouvez passer des appels directs vers NCache pour les opérations d'écriture sur la source de données. NCache utilise l' WriteToDataSource
méthode dans la classe d’accès aux données spécifiée pour écrire des opérations sur la source de données.
// 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
}
Notes
Pour garantir la sécurité de l'opération, il est recommandé de gérer toutes les exceptions potentielles au sein de votre application, comme expliqué dans Gestion des échecs.
Ressources additionnelles
NCache fournit un exemple d'application pour l'écriture directe sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Durée espace de noms.
Java: com.alachisoft.ncache.runtime.datasourceprovider espace de noms.