Implementar cargador de caché y actualización
Para usar Cache Startup Loader and Refresher, el ICacheLoader
La interfaz debe implementarse primero. Luego, la lógica personalizada de Loader y Refresher se puede configurar usando NCache Centro de gestion or Herramientas de línea de comandos. NCache carga y actualiza los datos del origen de datos configurado en función de la lógica personalizada. Al iniciar el caché, NCache llama al Init
método del Cache Startup Loader para inicializarlo. Inicialización exitosa del Cache Startup Loader, llama al implementado LoadDatasetOnStartup
método para cargar datos en el caché. Luego usa el Actualizar conjunto de datos método para actualizar los datos cargados en el caché en el determinado Intervalo de actualización.
En el siguiente ejemplo, el cliente implementa el ICacheLoader
interfaz para configurar su lógica personalizada de cargador y actualización. Si configuró dos conjuntos de datos del NCache Centro de gestion: Productos y Proveedores. Las siguientes cargas de implementación Productos y Proveedores al iniciar el caché. Además, actualiza estos conjuntos de datos en el intervalo de tiempo de actualización especificado.
Para obtener más detalles sobre los componentes de Cache Loader, consulte el capítulo Componentes de Cache Startup Loader and Refresher.
Requisitos previos del cargador de caché y de actualización
- Para obtener información sobre los requisitos previos estándar necesarios para trabajar con todos NCache funciones del lado del servidor, consulte la página dada en Requisitos previos de la API del lado del servidor.
- Para obtener detalles de la API, consulte: Dolor, Artículo de caché, ICacheLoader.
- Este debería ser un proyecto de biblioteca de clases.
- Asegúrese de configurar el cargador de caché usando el NCache Centro de gestión o herramientas de línea de comandos en la NCache racimo.
Inicializar el cargador y el actualizador de caché
El siguiente código muestra cómo implementar el Init
método de la ICacheLoader
interfaz. Este método toma parámetros como entrada y les asigna valores.
public void Init(IDictionary<string, string> parameters, string cacheName)
{
cache = CacheManager.GetCache(cacheName);
connectionString = parameters.ContainsKey("ConnectionString") ? parameters["ConnectionString"] : null;
if (connectionString != null)
{
connection = new SqlConnection(connectionString);
}
}
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.
Cargar datos al iniciar la caché
La siguiente implementación del LoadDatasetOnStartup
método obtiene un Producto desde la fuente de datos y lo agrega al caché. El LoadDatasetOnStartup
devuelve un contexto de usuario que contiene la información sobre los datos cargados en la caché. Este método se llama cuando el caché comienza a precargar datos en el caché.
public object LoadDatasetOnStartup(string dataset)
{
// Create a list of datasets to load at cache startup
IList<object> datasetToLoad;
switch (dataset.ToLower())
{
// If dataset is products, fetch products from data source to load in cache
case "products":
datasetToLoad = FetchProductsFromDataSource();
// Insert fetched products in the cache
foreach (var product in datasetToLoad)
{
string key = $"ProductID:{product.Id}";
cache.Insert(key, product);
}
break;
// If dataset is suppliers, fetch suppliers from data source to load in cache
case "suppliers":
datasetToLoad = FetchSuppliersFromDataSource();
// Insert fetched suppliers in the cache
foreach (var supplier in datasetToLoad)
{
string key = $"SupplierID:{supplier.Id}";
cache.Insert(key, supplier);
}
break;
default:
// Invalid dataset
}
// User context is the time at which datasets were loaded in the cache
object userContext = DateTime.Now;
return userContext;
}
Actualizar conjunto de datos
El siguiente código implementa cómo actualizar los datos que se han cargado en la memoria caché al iniciar cada vez que se invoca Cache Refresher. Él Actualizar conjunto de datos El método utiliza el contexto de usuario devuelto por el Cargar conjunto de datos al iniciar método para verificar qué datos actualizar.
public object RefreshDataset(string dataset, object userContext)
{
DateTime? lastRefreshTime;
switch (dataset.ToLower())
{
// If dataset is products, fetch updated products from data source
case "products":
lastRefreshTime = userContext as DateTime?;
IList<Product> productsToRefresh = FetchUpdatedProducts(lastRefreshTime) as IList<Product>;
// Insert updated products in the cache
foreach (var product in productsToRefresh)
{
string key = $"ProductID:{product.Id}";
CacheItem cacheItem = new CacheItem(product);
_cache.Insert(key, cacheItem);
}
break;
// If dataset is supplier, fetch updated suppliers from data source
case "suppliers":
lastRefreshTime = userContext as DateTime?;
IList<Supplier> suppliersToRefresh = FetchUpdatedSuppliers(lastRefreshTime) as IList<Supplier>;
// Insert updated suppliers in the cache
foreach (var supplier in suppliersToRefresh)
{
string key = $"SupplierID:{supplier.Id}";
CacheItem cacheItem = new CacheItem(supplier);
_cache.Insert(key, cacheItem);
}
break;
default:
// Invalid dataset
}
// User context is the time at which datasets were refreshed
userContext = DateTime.Now;
return userContext;
}
Obtener conjuntos de datos para actualizar
La Obtener conjuntos de datos para actualizar El método implementa la lógica personalizada para actualizar un conjunto de datos preconfigurado en tiempo de ejecución según el RefreshPreference
. Este método toma el contexto del usuario y asigna un ActualizarPreferencia dependiendo del conjunto de datos especificado.
public IDictionary<string, RefreshPreference> GetDatasetsToRefresh(IDictionary<string, object> userContexts)
{
DateTime? lastRefreshTime;
bool datasetHasUpdated;
// Create a dictionary for datasets to refresh with their Refresh Preference
IDictionary<string, RefreshPreference> DatasetsToRefresh = new Dictionary<string, RefreshPreference>();
foreach (var dataset in userContexts.Keys)
{
switch (dataset.ToLower())
{
// If dataset is products, check if dataset has been updated in data source
// if yes, then refresh the dataset now
case "products":
lastRefreshTime = userContexts[dataset] as DateTime?;
datasetHasUpdated = HasProductDatasetUpdated(dataset, lastRefreshTime);
if (datasetHasUpdated)
{
DatasetsToRefresh.Add(dataset, RefreshPreference.RefreshNow);
}
break;
// If dataset is suppliers, check if dataset has been updated in data source
// if yes, then refresh dataset on next time of day
case "suppliers":
lastRefreshTime = userContexts[dataset] as DateTime?;
datasetHasUpdated = HasSupplierDatasetUpdated(dataset, lastRefreshTime);
if (datasetHasUpdated)
{
DatasetsToRefresh.Add(dataset, RefreshPreference.RefreshOnNextTimeOfDay);
}
break;
default:
// Invalid dataset
}
}
// Return the dictionary containing datasets to refresh on polling with their refresh preferences
return DatasetsToRefresh;
}
Deseche todos los recursos
Al final, llamar a la Dispose
El método garantiza que haya cerrado/eliminado todos los recursos para evitar el desperdicio.
Note
Configurar Cache Loader/Refresher en NCache haciendo referencia a Configurar cargador y actualización de caché en la Guía del administrador para obtener ayuda.
Recursos adicionales
NCache proporciona una aplicación de muestra para Cache Loader and Refresher en GitHub.
Vea también
.NETO: Alachisoft.NCache.Tiempo de ejecución espacio de nombres
Java: com.alachisoft.ncache.runtime.cacheloader espacio de nombres