Hoy en día, la mayoría de las aplicaciones de usuario que dependen de muchas llamadas a la base de datos están incorporando almacenamiento en caché distribuido para un mejor rendimiento y escalabilidad lineal. Para este propósito, el usuario querría que cada vez que ocurran cambios en la base de datos, el cambio también se refleje inmediatamente en el caché. NCache al ser un caché distribuido en memoria, nos brinda diferentes técnicas para propósitos similares para mantener los datos actualizados en el caché.
En primer lugar, NCache proporciona un Vencimiento donde los datos se eliminan automáticamente de la memoria caché después de un intervalo predefinido. En segundo lugar, viene la estrategia de Dependencia de caché en la base de datos donde los datos en caché permanecen sincronizados con la base de datos y se invalidan cada vez que se modifican. Asimismo, surge otro mecanismo que es Actualización de caché que se ejecuta en segundo plano en intervalos programados y mantiene los datos frescos y actualizados de manera controlada.
Este blog trata de explicar las diferentes estrategias de Cache Refresher y cómo mantiene los datos actualizados en caché.
NCache Detalles Documentos de vencimiento Cargador de caché y actualización
Actualización de caché: descripción general y concepto
Supongamos que el usuario ejecuta un canal de transmisión de video y almacena en caché alguna información nueva junto con sus respectivos videos en el caché. Durante un período de tiempo más largo, los videos en el caché permanecen sin cambios, pero ahora, por alguna razón, se agregan ciertos videos nuevos y otros se actualizan en la base de datos. Esto hace que los usuarios vean los videos más antiguos (datos obsoletos) que ya se han actualizado.
NCache proporciona un Actualización de caché función que mantiene actualizados los datos en la memoria caché actualizándolos en un intervalo de actualización específico. La actualización de los datos de caché incluye agregarlos, actualizarlos y eliminarlos cada vez que los datos cambien en la fuente de datos.
Para configurar Cache Refresher, el usuario primero debe implementar Cargador de inicio de caché. Este cargador se utiliza para precargar los datos en la memoria caché al iniciar la memoria caché en forma de conjuntos de datos que representan una forma de agrupar diferentes tipos de datos para lograr el paralelismo. Cada vez que se inicia la memoria caché, Cache Loader obtiene automáticamente datos de la fuente de datos contra los conjuntos de datos configurados. Para mantener estos datos precargados actualizados y sincronizados con los datos actualizados en la fuente de datos, se utiliza Cache Refresher, que actualiza estos conjuntos de datos por separado después de un intervalo de tiempo programado.
Diferentes propiedades de la actualización de caché
Hay algunas propiedades para Cache Refresher que el usuario debe conocer antes de comenzar con la implementación. A continuación se explican los detalles que deben tenerse en cuenta.
- Conjuntos de datos: Un conjunto de datos es una forma en que el usuario puede agrupar diferentes tipos de datos para que puedan cargarlos o actualizarlos por separado en diferentes intervalos o eventos para lograr el paralelismo.
- Programación de conjuntos de datos: Los conjuntos de datos se actualizan de acuerdo con un programa de conjuntos de datos. Este horario puede ser: Hora diaria, Intervalo diario, Semanal y Mensuales. Todos estos, que, en su implementación única, deciden el tiempo exacto después del cual se debe actualizar un conjunto de datos. Cada conjunto de datos puede tener su propio programa de actualización. Un ejemplo puede ser, actualizar el video sobre el conjunto de datos productos de panadería todos los domingos al mediodía de cada mes. Para más detalles, consulte Programación de conjuntos de datos en Documentos.
- Intervalo de actualización: Es un intervalo después del cual se ejecuta un subproceso para verificar los conjuntos de datos que están listos para actualizarse cuando llega la hora programada. Cada conjunto de datos tiene un intervalo de actualización programado diferente, pero este intervalo sigue siendo el mismo a nivel de caché. Este intervalo se puede establecer en un mínimo de 15 minutos y un máximo de 60 minutos respectivamente.
Cargador de caché y documentos de actualización Documentos de dependencia de caché
¿Cómo implementar la actualización de caché?
Para la implementación con Cache Refresher, primero el usuario debe configurar el ICacheLoader interfaz. En segundo lugar, NCache llama al método LoadDatasetOnStartup implementado para cargar datos en la memoria caché. A continuación, utiliza el método RefreshDataset para actualizar los datos cargados en la memoria caché por Cache Loader.
Supongamos que el usuario tiene dos videos en la base de datos, uno sobre productos de panadería y otro sobre productos de ropa.. La siguiente implementación precarga videos en el caché y luego, para cualquier actualización, actualiza los datos en un intervalo de actualización separado para ambos.
Inicializar caché y conexión
Se llama al método Init en Cache Startup para configurar la conexión. A continuación se muestra un ejemplo de implementación de En eso método de la interfaz ICacheLoader. Aquí abrimos una conexión SQL e inicializamos un caché con el nombre dado por el usuario.
1 2 3 4 5 6 7 8 |
public void Init(IDictionary<string, string> parameters, string cacheName) { string connectionString = parameters["connectionString"] as string; connection = new SqlConnection(connectionString); connection.Open(); cache = CacheManager.GetCache(cacheName); } |
Cargar conjuntos de datos en caché
En el segundo paso, el usuario utiliza Cargar conjunto de datos al iniciar, un método llamado al inicio de la memoria caché para cargar conjuntos de datos específicos en la memoria caché desde la base de datos para llenar previamente la memoria caché.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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 product in the cache foreach (var product in datasetToLoad) { string key = $"ProductID:{product.Id}"; cache.Insert(key, product); } break; default: // Invalid dataset } // User context is the time at which datasets were loaded in the cache object userContext = DateTime.Now; return userContext; } |
Actualizar conjuntos de datos cargados
En tercer lugar, para actualizar conjuntos de datos a intervalos periódicos, el usuario debe proporcionar la implementación de Actualizar conjunto de datos. Aquí, el usuario debe actualizar los datos ya precargados cargados por Cache Loader, agregar nuevos datos o eliminar los datos de ese conjunto de datos en particular.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public object RefreshDataset(string dataset, object userContext) { *DateTime? lastRefreshTime; switch (dataset.ToLower()) { // If dataset is "bakery products", fetch updated products from data source case "bakery 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; default: // Invalid dataset } // User context is the time at which datasets were refreshed userContext = DateTime.Now; return userContext; } |
Implementar actualización basada en encuestas
Ahora, viene el método. Obtener conjuntos de datos para actualizar, que se llama en cada intervalo de actualización y solo debe proporcionarse si el usuario desea usar su propia lógica personalizada para controlar el tiempo de actualización para diferentes conjuntos de datos cargados. Los conjuntos de datos devueltos se actualizan inmediatamente o en el mismo día que se indica.
Actualizar conjunto de datos a pedido
Finalmente, el usuario también tiene la opción de actualizar sus conjuntos de datos preconfigurados en tiempo de ejecución a través del Invocar-RefreshDataset cmdlet. Aquí, los conjuntos de datos se pueden actualizar inmediatamente o dentro de las próximas 24 horas usando el RefreshPreference
opción. A continuación se muestra un ejemplo donde el producto del conjunto de datos se actualiza inmediatamente en demoClusteredCache
en el servidor 20.200.20.11.
1 |
Invoke-RefresherDataset -CacheName demoClusteredCache -Server 20.200.20.11 -Dataset product -RefreshPreference RefreshNow |
Configurar Cache Loader y Refresher a través de NCache Web Manager
Una vez que el usuario ha implementado Cache Startup Loader and Refresher, puede configurar ambos a través de Web Manager y establecer el intervalo de actualización de acuerdo con sus requisitos. A continuación se muestra cómo se puede hacer.
Configurar cargador y actualización de caché Configuración de la caducidad de datos
¡Concluyendo el Blog!
Llegando al final, todo lo que se ha discutido hasta ahora indica que el caché debe actualizarse de manera eficiente y Cache Refresher es la mejor manera de hacerlo. Actualiza los datos de la caché si se produce algún cambio en la base de datos de forma muy sistemática. Al igual que la actualización de caché, NCache proporciona muchas características interesantes que se pueden realizar sin ningún inconveniente. Visite nuestro sitio web para más detalles!
NCache Detalles Descargar NCache Comparación de ediciones