Al giorno d'oggi, la maggior parte delle applicazioni utente che si basano su chiamate di database pesanti incorporano la memorizzazione nella cache distribuita per prestazioni migliori e scalabilità lineare. A tale scopo, l'utente desidera che ogni volta che si verificano modifiche nel database, la modifica si rifletta immediatamente anche nella cache. NCache essendo una cache distribuita in memoria, ci fornisce diverse tecniche per scopi simili per mantenere i dati freschi nella cache.
Innanzitutto, NCache fornisce Scadenza dove i dati vengono rimossi automaticamente dalla cache dopo un intervallo predefinito. In secondo luogo, arriva la strategia di Dipendenza della cache dal database dove i dati nella cache rimangono sincronizzati con il database e vengono invalidati ogni volta che vengono modificati. Allo stesso modo, arriva un altro meccanismo che è Aggiornamento della cache che viene eseguito in background a intervalli programmati e mantiene i dati freschi e aggiornati in modo controllato.
Questo blog spiega le diverse strategie di Cache Refresher e come mantiene i dati aggiornati nella cache.
NCache Dettagli Documenti di scadenza Caricatore di cache e aggiornamento
Aggiornamento cache: panoramica e concetto
Supponiamo che l'utente esegua un canale di streaming video e abbia memorizzato nella cache alcune nuove informazioni insieme ai rispettivi video. Per un periodo di tempo più lungo, i video nella cache rimangono invariati, ma ora, per qualche motivo, alcuni nuovi video vengono aggiunti e altri vengono aggiornati nel database. Ciò fa sì che gli utenti visualizzino i video più vecchi (dati non aggiornati) che sono già stati aggiornati.
NCache fornisce Aggiornamento della cache funzione che mantiene aggiornati i dati nella cache aggiornandoli a un intervallo di aggiornamento specifico. L'aggiornamento dei dati della cache include l'aggiunta, l'aggiornamento e la rimozione ogni volta che i dati cambiano nell'origine dati.
Per configurare Cache Refresher, l'utente deve prima implementare Caricatore di avvio della cache. Questo caricatore viene utilizzato per precaricare i dati nella cache all'avvio della cache sotto forma di set di dati che rappresentano un modo per raggruppare diversi tipi di dati insieme per ottenere il parallelismo. Ogni volta che la cache si avvia, Cache Loader recupera automaticamente i dati dall'origine dati rispetto ai set di dati configurati. Per mantenere questi dati precaricati aggiornati e sincronizzati con i dati aggiornati nell'origine dati, viene utilizzato Cache Refresher che aggiorna questi set di dati separatamente dopo un intervallo di tempo pianificato.
Diverse proprietà dell'aggiornamento della cache
Ci sono alcune proprietà per Cache Refresher che l'utente deve conoscere prima di iniziare con l'implementazione. Di seguito sono spiegati i loro dettagli che devono essere tenuti a mente.
- Dataset: Un set di dati consente all'utente di raggruppare diversi tipi di dati in modo che possano caricarli o aggiornarli separatamente a intervalli o eventi diversi per ottenere il parallelismo.
- Programmazione del set di dati: I set di dati vengono aggiornati in base a una pianificazione del set di dati. Questo programma può essere: Orario giornaliero, Intervallo giornaliero, Settimanale ed Mensile. Tutti questi, che, nella loro implementazione unica, decidono l'ora esatta dopo la quale un set di dati deve essere aggiornato. Ogni set di dati può avere la propria pianificazione di aggiornamento. Un esempio può essere quello di aggiornare il video relativo al set di dati prodotti da forno ogni domenica a mezzogiorno di ogni mese. Per ulteriori dettagli, fare riferimento a Pianificazione del set di dati in Documenti.
- Intervallo di aggiornamento: È un intervallo dopo il quale un thread viene eseguito per controllare i set di dati che sono pronti per essere aggiornati quando è arrivata l'ora pianificata. Ogni set di dati ha un intervallo di aggiornamento pianificato diverso, ma questo intervallo rimane lo stesso a livello di cache. Questo intervallo può essere impostato rispettivamente su un minimo di 15 minuti e un massimo di 60 minuti.
Caricatore cache e documenti di aggiornamento Documenti di dipendenza dalla cache
Come implementare l'aggiornamento della cache?
Per l'implementazione con Cache Refresher, l'utente deve prima configurare il file ICacheLoader interfaccia. In secondo luogo, NCache chiama il metodo LoadDatasetOnStartup implementato per caricare i dati nella cache. Quindi utilizza il metodo RefreshDataset per aggiornare i dati caricati nella cache dal Cache Loader.
Supponiamo che l'utente abbia due video nel database, uno che rivaluta i prodotti da forno e l'altro i prodotti di abbigliamento. L'implementazione seguente precarica i video nella cache e quindi, per qualsiasi aggiornamento, aggiorna i dati su un intervallo di aggiornamento separato per entrambi.
Inizializza cache e connessione
Il metodo Init viene chiamato all'avvio della cache per configurare la connessione. Di seguito è riportato un esempio di implementazione di Dentro metodo dell'interfaccia ICacheLoader. Qui apriamo una connessione SQL e inizializziamo una cache con il nome dato dall'utente.
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); } |
Carica set di dati nella cache
Nella seconda fase, l'utente utilizza Carica set di dati all'avvio, un metodo chiamato all'avvio della cache per caricare i set di dati specificati nella cache dal database per preriempire la cache.
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; } |
Aggiorna i set di dati caricati
In terzo luogo, per aggiornare i set di dati a intervalli periodici, l'utente dovrebbe fornire l'implementazione di Aggiorna set di dati. Qui, l'utente deve aggiornare i dati già precaricati caricati da Cache Loader, aggiungere nuovi dati o rimuovere i dati da quel particolare set di dati.
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; } |
Implementare un aggiornamento basato su sondaggi
Ora arriva il metodo Ottieni set di dati da aggiornare, che viene chiamato a ogni intervallo di aggiornamento e deve essere fornito solo se l'utente desidera utilizzare la propria logica personalizzata per controllare il tempo di aggiornamento per diversi set di dati caricati. I set di dati restituiti vengono aggiornati immediatamente o entro lo stesso giorno indicato.
Aggiorna il set di dati su richiesta
Infine, l'utente ha anche la possibilità di aggiornare i propri set di dati preconfigurati in fase di esecuzione tramite il Invoca-Aggiornadataset cmdlet. Qui, i set di dati possono essere aggiornati immediatamente o entro le 24 ore successive utilizzando il RefreshPreference
opzione. Di seguito viene mostrato un esempio in cui il prodotto del set di dati viene aggiornato immediatamente demoClusteredCache
sul server 20.200.20.11.
1 |
Invoke-RefresherDataset -CacheName demoClusteredCache -Server 20.200.20.11 -Dataset product -RefreshPreference RefreshNow |
Configura il caricatore di cache e l'aggiornamento tramite NCache Web Manager
Una volta che l'utente ha implementato Cache Startup Loader e Refresher, può configurare sia tramite Web Manager che impostare l'intervallo di aggiornamento in base alle proprie esigenze. Di seguito è riportato come si può fare.
Configura il caricatore di cache e l'aggiornamento Configurazione della scadenza dei dati
Concludo il blog!
Verso la fine, tutto ciò che è stato discusso finora dice che la cache deve essere aggiornata in modo efficiente e Cache Refresher è il modo migliore per farlo. Aggiorna i dati della cache se si verificano modifiche nel database in modo molto sistematico. Proprio come Cache Refresher, NCache fornisce molte funzioni interessanti che possono essere eseguite senza alcun inconveniente. Controlla il nostro sito per maggiori dettagli!
NCache Dettagli Scaricare NCache Confronto edizione