Configuración e implementación del proveedor de almacenamiento en caché de lectura directa
Para usar el almacenamiento en caché Read-Through, debe implementar el IReadThruProvider
interfaz para .NET y el ReadThruProvider
interfaz para Java. NCache utilizará esta implementación personalizada para leer datos del origen de datos. Por favor refiérase a Configurar Volver a configurar la lectura completa en la Guía del administrador para más información.
advertencia
Si se especifica un proveedor de almacenamiento en caché de lectura directa en cliente.ncconf existentes default-readthru-provider
etiqueta y también a través de API, entonces el proveedor en API sobrescribirá el especificado en cliente.ncconf.
Importante:
Para Java, antes de agregar las dependencias de Maven, debe asegurarse de que:
- JDK 17 está instalado.
- La variable de entorno para Java está configurada.
Requisitos previos
- Para obtener información sobre los requisitos previos estándar necesarios para trabajar con todos NCache funciones del lado del servidor, incluido el almacenamiento en caché de lectura, consulte la página proporcionada en Requisitos previos de la API del lado del servidor.
- Este debería ser un proyecto de biblioteca de clases usando Microsoft Visual Studio.
- Asegúrese de Implementar proveedor de lectura a través usando el NCache Centro de Gestión.
- Para obtener detalles de la API, consulte: IReadThruProvider, CargarDesdeFuente, Cargar tipo de datos desde fuente.
Note
In NCache, Los proveedores de almacenamiento en caché de lectura directa se configuran en el nivel de caché, es decir, para los cachés en clúster, todos los nodos contendrán configuraciones de proveedores y sus ensamblados implementados.
Implementación de muestra para el proveedor de almacenamiento en caché ReadThrough
El siguiente código de ejemplo proporciona una implementación de muestra para configurar un proveedor de almacenamiento en caché de lectura directa utilizando el IReadThruProvider
clase para .NET y el ReadThruProvider
clase para Java. Él LoadFromSource
y LoadDataTypeFromSource
Los métodos contienen lógica para cargar un objeto o tipo de datos respectivamente desde la fuente de datos configurada si el objeto no se encuentra en la memoria caché. También el GetConnectionString
devuelve la cadena de conexión para el origen de datos configurado.
public class SampleReadThruProvider : IReadThruProvider
{
private SqlConnection _connection;
//Perform tasks like allocating resources or acquiring connections
public void Init(IDictionary parameters, string cacheId)
{
object server = parameters["server"];
object userId = parameters["username"];
object password = parameters["password"];
object database = parameters["database"];
string connString = GetConnectionString(server.ToString(), database.ToString(), userId.ToString(), password.ToString());
if (connString != "")
_connection = new SqlConnection(connString);
try
{
_connection.Open();
}
catch (Exception ex)
{
//handle exception
}
}
// Responsible for loading an item from the external data source
public ProviderCacheItem LoadFromSource(string key)
{
// LoadFromDataSource loads data from data source
object value = LoadFromDataSource(key);
var cacheItem = new ProviderCacheItem(value);
return cacheItem;
}
//Responsible for loading bulk of items from the external data source
public IDictionary<string, ProviderCacheItem> LoadFromSource(ICollection<string> keys)
{
var dictionary = new Dictionary<string, ProviderCacheItem>();
try
{
foreach (string key in keys)
{
// LoadFromDataSource loads data from data source
dictionary.Add(key, new ProviderCacheItem(LoadFromDataSource(key)));
}
return dictionary;
}
catch (Exception exp)
{
// Handle exception
}
return dictionary;
}
// Adds ProviderDataTypeItem with enumerable data type
public ProviderDataTypeItem<IEnumerable> LoadDataTypeFromSource(string key, DistributedDataType dataType)
{
IEnumerable value = null;
ProviderDataTypeItem<IEnumerable> dataTypeItem = null;
switch (dataType)
{
case DistributedDataType.List:
value = new List<object>()
{
LoadFromDataSource(key)
};
dataTypeItem = new ProviderDataTypeItem<IEnumerable>(value);
break;
case DistributedDataType.Dictionary:
value = new Dictionary<string, object>()
{
{ key , LoadFromDataSource(key) }
};
dataTypeItem = new ProviderDataTypeItem<IEnumerable>(value);
break;
case DistributedDataType.Counter:
dataTypeItem = new ProviderDataTypeItem<IEnumerable>(1000);
break;
}
return dataTypeItem;
}
//Perform tasks associated with freeing, releasing, or resetting resources.
public void Dispose()
{
if (_connection != null)
{
_connection.Close();
}
}
private object LoadFromDataSource(string key)
{
object retrievedObject = null;
// Load item from your data source and populate retrieved Object
return retrievedObject;
}
private string GetConnectionString(string server, string database, string userName, string password)
{
string connectionString = null;
try
{
if (!string.IsNullOrEmpty(server))
{
connectionString = "Server=" + server + ";";
}
else
{
//Server name is empty
}
if (!string.IsNullOrEmpty(database))
{
connectionString = connectionString + "Database=" + database + ";";
}
else
{
//Database is empty;
}
if (!string.IsNullOrEmpty(userName))
{
connectionString = connectionString + "User ID=" + userName + ";";
}
else
{
connectionString = connectionString + "User ID=" + "" + ";";
}
if (!string.IsNullOrEmpty(password))
{
connectionString = connectionString + "Password=" + password + ";";
}
else
{
connectionString = connectionString + "Password=" + "" + ";";
}
}
catch (Exception exp)
{
// Handle exception
}
return connectionString;
}
// Deploy this class on cache
}
Note
Para garantizar que la operación sea a prueba de fallas, se recomienda manejar cualquier posible excepción dentro de su aplicación, como se explica en Manejo de fallas.
Recursos adicionales
NCache proporciona una aplicación de muestra para lectura completa en GitHub.
Vea también
.NETO: Alachisoft.NCache.Tiempo de ejecución espacio de nombres
Java: com.alachisoft.ncache.runtime.datasourceprovider espacio de nombres